//--------------------------------------------------------------------------------------
// File: DXUTShapes.cpp
//
// Shape creation functions for DXUT
//
// Copyright (c) Microsoft Corporation. All rights reserved
//--------------------------------------------------------------------------------------
#include "DXUT.h"
#include "DXUTShapes.h"


//--------------------------------------------------------------------------------------
// VERTEX is the vertex layout for all DXUT created shapes
//--------------------------------------------------------------------------------------
struct VERTEX
{
    D3DXVECTOR3 pos;
    D3DXVECTOR3 norm;
};

static const D3D10_INPUT_ELEMENT_DESC s_ShapeLayout[] =
{
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
    { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 },
};


//--------------------------------------------------------------------------------------
static inline void sincosf( float angle, float* psin, float* pcos )
{
    *psin = sinf( angle );
    *pcos = cosf( angle );
}


//--------------------------------------------------------------------------------------
// Create D3DX10Mesh from the input vertex and index data
//--------------------------------------------------------------------------------------
HRESULT CreateShapeMesh( ID3D10Device* pDev10, ID3DX10Mesh** ppMesh, VERTEX* pVertices, UINT NumVertices,
                         WORD* pIndices, UINT NumIndices )
{
    HRESULT hr = S_OK;

    // Create the mesh 
    hr = D3DX10CreateMesh( pDev10,
                           s_ShapeLayout,
                           sizeof( s_ShapeLayout ) / sizeof( s_ShapeLayout[0] ),
                           s_ShapeLayout[0].SemanticName,
                           NumVertices,
                           NumIndices / 3,
                           0,
                           ppMesh );
    if( FAILED( hr ) )
        return hr;

    // Set the Vertex Data
    ( *ppMesh )->SetVertexData( 0, pVertices );

    // Set the Index Data
    ( *ppMesh )->SetIndexData( pIndices, NumIndices );

    // Set attributes
    DWORD dwNumAttr = 1;
    D3DX10_ATTRIBUTE_RANGE* pAttr = new D3DX10_ATTRIBUTE_RANGE[dwNumAttr];
    if( !pAttr )
        return E_OUTOFMEMORY;

    pAttr[0].AttribId = 0;
    pAttr[0].FaceStart = 0;
    pAttr[0].FaceCount = NumIndices / 3;
    pAttr[0].VertexStart = 0;
    pAttr[0].VertexCount = NumVertices;
    ( *ppMesh )->SetAttributeTable( pAttr, dwNumAttr );
    SAFE_DELETE_ARRAY( pAttr );

    // Create the internal mesh VBs and IBs
    ( *ppMesh )->CommitToDevice();

    return hr;
}


//----------------------------------------------------------------------------
// Box
//----------------------------------------------------------------------------
static float cubeN[6][3] =
{
    {-1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f, 0.0f},
    {0.0f, -1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, -1.0f}
};

static WORD cubeF[6][4] =
{
    { 0, 1, 5, 4 }, { 4, 5, 6, 7 }, { 7, 6, 2, 3 },
    { 1, 0, 3, 2 }, { 1, 2, 6, 5 }, { 0, 4, 7, 3 }
};

static float cubeV[8][3] =
{
    // Lower tier (lower in y)
    {-.5f, -.5f, -.5f},
    {-.5f, -.5f,  .5f},
    { .5f, -.5f,  .5f},
    { .5f, -.5f, -.5f},

    // Upper tier
    {-.5f, .5f, -.5f},
    {-.5f, .5f,  .5f},
    { .5f, .5f,  .5f},
    { .5f, .5f, -.5f},
};

static float cubeT[4][2] =
{
    // Lower tier (lower in y)
    {0.0f, 0.0f},
    {0.0f, 1.0f},
    {1.0f, 1.0f},
    {1.0f, 0.0f}
};

static WORD cubeFT[6][4] =
{
    { 3, 0, 1, 2 }, { 0, 1, 2, 3 }, { 1, 2, 3, 0 },
    { 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 0, 1, 2, 3 }
};


//--------------------------------------------------------------------------------------
// MakeBox helper
//--------------------------------------------------------------------------------------
static void    MakeBox(
VERTEX* pVertices,
DWORD* pPointRep,
WORD* pwIndices,
float fWidth,
float fHeight,
float fDepth )
{
    // Fill in the data
    VERTEX* pVertex = pVertices;
    WORD* pwFace = pwIndices;
    UINT iVertex = 0;

    // i iterates over the faces, 2 triangles per face
    for( int i = 0; i < 6; i++ )
    {
        for( int j = 0; j < 4; j++ )
        {
            pVertex->pos.x = cubeV[cubeF[i][j]][0] * fWidth;
            pVertex->pos.y = cubeV[cubeF[i][j]][1] * fHeight;
            pVertex->pos.z = cubeV[cubeF[i][j]][2] * fDepth;

            pVertex->norm.x = cubeN[i][0];
            pVertex->norm.y = cubeN[i][1];
            pVertex->norm.z = cubeN[i][2];

            if( pPointRep != NULL )
            {
                *pPointRep = cubeF[i][j];
                pPointRep++;
            }

            pVertex++;
        }

        pwFace[0] = ( WORD )( iVertex );
        pwFace[1] = ( WORD )( iVertex + 1 );
        pwFace[2] = ( WORD )( iVertex + 2 );
        pwFace += 3;

        pwFace[0] = ( WORD )( iVertex + 2 );
        pwFace[1] = ( WORD )( iVertex + 3 );
        pwFace[2] = ( WORD )( iVertex );
        pwFace += 3;

        iVertex += 4;
    }
}


//--------------------------------------------------------------------------------------
// DXUTCreateBox - create a box mesh
//--------------------------------------------------------------------------------------
HRESULT WINAPI DXUTCreateBox( ID3D10Device* pDevice, float fWidth, float fHeight, float fDepth, ID3DX10Mesh** ppMesh )
{
    HRESULT hr = S_OK;

    WORD* pwIndices = NULL;
    VERTEX* pVertices = NULL;

    // Set up the defaults
    if( D3DX_DEFAULT_FLOAT == fWidth )
        fWidth = 1.0f;
    if( D3DX_DEFAULT_FLOAT == fHeight )
        fHeight = 1.0f;
    if( D3DX_DEFAULT_FLOAT == fDepth )
        fDepth = 1.0f;


    // Validate parameters
    if( !pDevice )
        return D3DERR_INVALIDCALL;
    if( !ppMesh )
        return D3DERR_INVALIDCALL;
    if( fWidth < 0.0f )
        return D3DERR_INVALIDCALL;
    if( fHeight < 0.0f )
        return D3DERR_INVALIDCALL;
    if( fDepth < 0.0f )
        return D3DERR_INVALIDCALL;

    // Create the mesh
    UINT cFaces = 12;
    UINT cVertices = 24;

    // Create enough memory for the vertices and indices
    pVertices = new VERTEX[ cVertices ];
    if( !pVertices )
        return E_OUTOFMEMORY;
    pwIndices = new WORD[ cFaces * 3 ];
    if( !pwIndices )
        return E_OUTOFMEMORY;

    // Create a box
    MakeBox( pVertices, NULL, pwIndices, fWidth, fHeight, fDepth );

    // Create a mesh
    hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 );

    // Free up the memory
    SAFE_DELETE_ARRAY( pVertices );
    SAFE_DELETE_ARRAY( pwIndices );

    return hr;

}

#define CACHE_SIZE    240

//----------------------------------------------------------------------------
// MakeCylinder helper
//----------------------------------------------------------------------------
static void    MakeCylinder(
VERTEX* pVertices,
DWORD* pPointReps,
WORD* pwIndices,
float fRadius1,
float fRadius2,
float fLength,
UINT uSlices,
UINT uStacks )
{
    UINT i, j;

    // Sin/Cos caches
    float sinI[CACHE_SIZE], cosI[CACHE_SIZE];

    for( i = 0; i < uSlices; i++ )
        sincosf( 2.0f * D3DX_PI * i / uSlices, sinI + i, cosI + i );


    // Compute side normal angle
    float fDeltaRadius = fRadius2 - fRadius1;
    float fSideLength = sqrtf( fDeltaRadius * fDeltaRadius + fLength * fLength );

    float fNormalXY = ( fSideLength > 0.00001f ) ? ( fLength / fSideLength )       : 1.0f;
    float fNormalZ = ( fSideLength > 0.00001f ) ? ( -fDeltaRadius / fSideLength ) : 0.0f;



    // Generate vertices
    VERTEX* pVertex = pVertices;
    float fZ, fRadius;
    DWORD iVertex;

    // Base cap (uSlices + 1)
    fZ = fLength * -0.5f;
    fRadius = fRadius1;
    iVertex = 0;

    pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, fZ );
    pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, -1.0f );
    pVertex++;
    if( pPointReps != NULL )
        pPointReps[iVertex] = iVertex;
    iVertex++;

    for( i = 0; i < uSlices; i++ )
    {
        pVertex->pos = D3DXVECTOR3( fRadius * sinI[i], fRadius * cosI[i], fZ );
        pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, -1.0f );
        pVertex++;

        // link into stack vertices, which follow
        if( pPointReps != NULL )
            pPointReps[iVertex] = iVertex + uSlices;
        iVertex++;
    }

    // Stacks ((uStacks + 1)*uSlices)
    for( j = 0; j <= uStacks; j++ )
    {
        float f = ( float )j / ( float )uStacks;

        fZ = fLength * ( f - 0.5f );
        fRadius = fRadius1 + f * fDeltaRadius;

        for( i = 0; i < uSlices; i++ )
        {
            pVertex->pos = D3DXVECTOR3( fRadius * sinI[i], fRadius * cosI[i], fZ );
            pVertex->norm = D3DXVECTOR3( fNormalXY * sinI[i], fNormalXY * cosI[i], fNormalZ );
            pVertex++;
            if( pPointReps != NULL )
                pPointReps[iVertex] = iVertex;
            iVertex++;
        }
    }

    // Top cap (uSlices + 1)
    fZ = fLength * 0.5f;
    fRadius = fRadius2;

    for( i = 0; i < uSlices; i++ )
    {
        pVertex->pos = D3DXVECTOR3( fRadius * sinI[i], fRadius * cosI[i], fZ );
        pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
        pVertex++;

        // link into stack vertices, which precede
        if( pPointReps != NULL )
            pPointReps[iVertex] = iVertex - uSlices;
        iVertex++;
    }

    pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, fZ );
    pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
    pVertex++;
    if( pPointReps != NULL )
        pPointReps[iVertex] = iVertex;
    iVertex++;



    // Generate indices
    WORD* pwFace = pwIndices;
    UINT uRowA, uRowB;

    // Z+ pole (uSlices)
    uRowA = 0;
    uRowB = 1;

    for( i = 0; i < uSlices - 1; i++ )
    {
        pwFace[0] = ( WORD )( uRowA );
        pwFace[1] = ( WORD )( uRowB + i );
        pwFace[2] = ( WORD )( uRowB + i + 1 );
        pwFace += 3;
    }

    pwFace[0] = ( WORD )( uRowA );
    pwFace[1] = ( WORD )( uRowB + i );
    pwFace[2] = ( WORD )( uRowB );
    pwFace += 3;

    // Interior stacks (uStacks * uSlices * 2)
    for( j = 0; j < uStacks; j++ )
    {
        uRowA = 1 + ( j + 1 ) * uSlices;
        uRowB = uRowA + uSlices;

        for( i = 0; i < uSlices - 1; i++ )
        {
            pwFace[0] = ( WORD )( uRowA + i );
            pwFace[1] = ( WORD )( uRowB + i );
            pwFace[2] = ( WORD )( uRowA + i + 1 );
            pwFace += 3;

            pwFace[0] = ( WORD )( uRowA + i + 1 );
            pwFace[1] = ( WORD )( uRowB + i );
            pwFace[2] = ( WORD )( uRowB + i + 1 );
            pwFace += 3;
        }

        pwFace[0] = ( WORD )( uRowA + i );
        pwFace[1] = ( WORD )( uRowB + i );
        pwFace[2] = ( WORD )( uRowA );
        pwFace += 3;

        pwFace[0] = ( WORD )( uRowA );
        pwFace[1] = ( WORD )( uRowB + i );
        pwFace[2] = ( WORD )( uRowB );
        pwFace += 3;
    }

    // Z- pole (uSlices)
    uRowA = 1 + ( uStacks + 2 ) * uSlices;
    uRowB = uRowA + uSlices;

    for( i = 0; i < uSlices - 1; i++ )
    {
        pwFace[0] = ( WORD )( uRowA + i );
        pwFace[1] = ( WORD )( uRowB );
        pwFace[2] = ( WORD )( uRowA + i + 1 );
        pwFace += 3;
    }

    pwFace[0] = ( WORD )( uRowA + i );
    pwFace[1] = ( WORD )( uRowB );
    pwFace[2] = ( WORD )( uRowA );
    pwFace += 3;
}


//----------------------------------------------------------------------------
// DXUTCreateCylinder - create a cylinder mesh
//----------------------------------------------------------------------------
HRESULT WINAPI DXUTCreateCylinder( ID3D10Device* pDevice, float fRadius1, float fRadius2, float fLength, UINT uSlices,
                                   UINT uStacks, ID3DX10Mesh** ppMesh )
{
    HRESULT hr = S_OK;

    WORD* pwIndices = NULL;
    VERTEX* pVertices = NULL;

    // Set up the defaults
    if( D3DX_DEFAULT_FLOAT == fRadius1 )
        fRadius1 = 1.0f;
    if( D3DX_DEFAULT_FLOAT == fRadius2 )
        fRadius2 = 1.0f;
    if( D3DX_DEFAULT_FLOAT == fLength )
        fLength = 1.0f;
    if( D3DX_DEFAULT == uSlices )
        uSlices = 8;
    if( D3DX_DEFAULT == uStacks )
        uStacks = 8;


    // Validate parameters
    if( !pDevice )
        return D3DERR_INVALIDCALL;
    if( !ppMesh )
        return D3DERR_INVALIDCALL;
    if( fRadius1 < 0.0f )
        return D3DERR_INVALIDCALL;
    if( fRadius2 < 0.0f )
        return D3DERR_INVALIDCALL;
    if( fLength < 0.0f )
        return D3DERR_INVALIDCALL;
    if( uSlices < 2 )
        return D3DERR_INVALIDCALL;
    if( uStacks < 1 )
        return D3DERR_INVALIDCALL;
    if( uSlices >= CACHE_SIZE )
        uSlices = CACHE_SIZE - 1;

    // Create the mesh
    UINT cFaces = ( uStacks + 1 ) * uSlices * 2;
    UINT cVertices = 2 + ( uStacks + 3 ) * uSlices;

    // Create enough memory for the vertices and indices
    pVertices = new VERTEX[ cVertices ];
    if( !pVertices )
        return E_OUTOFMEMORY;
    pwIndices = new WORD[ cFaces * 3 ];
    if( !pwIndices )
        return E_OUTOFMEMORY;

    // Create a cylinder
    MakeCylinder( pVertices, NULL, pwIndices, fRadius1, fRadius2,
                  fLength, uSlices, uStacks );

    // Create a mesh
    hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 );

    // Free up the memory
    SAFE_DELETE_ARRAY( pVertices );
    SAFE_DELETE_ARRAY( pwIndices );

    return hr;
}


//--------------------------------------------------------------------------------------
// MakePolygon helper
//--------------------------------------------------------------------------------------
static void    MakePolygon( VERTEX* pVertices,
                            WORD* pwIndices,
                            float fLength,
                            UINT uSides )
{
    // Calculate the radius
    float radius = fLength * 0.5f / sinf( D3DX_PI / ( float )uSides );
    float angle = ( float )( 2.0f * D3DX_PI / ( float )uSides );

    // Fill in vertices
    VERTEX* pVertex = pVertices;

    pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
    pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
    pVertex++;

    for( UINT j = 0; j < uSides; j++ )
    {
        float s, c;
        sincosf( angle * j, &s, &c );

        pVertex->pos = D3DXVECTOR3( c * radius, s * radius, 0.0f );
        pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
        pVertex++;
    }

    // Fill in indices
    WORD* pwFace = pwIndices;

    UINT iFace;
    for( iFace = 0; iFace < uSides - 1; iFace++ )
    {
        pwFace[0] = 0;
        pwFace[1] = ( WORD )iFace + 1;
        pwFace[2] = ( WORD )iFace + 2;

        pwFace += 3;
    }

    // handle the wrapping of the last case
    pwFace[0] = 0;
    pwFace[1] = ( WORD )iFace + 1;
    pwFace[2] = 1;
}


//----------------------------------------------------------------------------
// DXUTCreatePolygon - create a polygon mesh
//----------------------------------------------------------------------------
HRESULT WINAPI DXUTCreatePolygon( ID3D10Device* pDevice, float fLength, UINT uSides, ID3DX10Mesh** ppMesh )
{
    HRESULT hr = S_OK;
    WORD* pwIndices = NULL;
    VERTEX* pVertices = NULL;

    // Set up the defaults
    if( D3DX_DEFAULT == uSides )
        uSides = 3;
    if( D3DX_DEFAULT_FLOAT == fLength )
        fLength = 1.0f;


    // Validate parameters
    if( !pDevice )
        return D3DERR_INVALIDCALL;
    if( !ppMesh )
        return D3DERR_INVALIDCALL;
    if( fLength < 0.0f )
        return D3DERR_INVALIDCALL;
    if( uSides < 3 )
        return D3DERR_INVALIDCALL;

    // Create the mesh
    UINT cFaces = uSides;
    UINT cVertices = uSides + 1;

    // Create enough memory for the vertices and indices
    pVertices = new VERTEX[ cVertices ];
    if( !pVertices )
        return E_OUTOFMEMORY;
    pwIndices = new WORD[ cFaces * 3 ];
    if( !pwIndices )
        return E_OUTOFMEMORY;

    // Create a polygon
    MakePolygon( pVertices, pwIndices, fLength, uSides );

    // Create a mesh
    hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 );

    // Free up the memory
    SAFE_DELETE_ARRAY( pVertices );
    SAFE_DELETE_ARRAY( pwIndices );

    return hr;
}


//---------------------------------------------------------------------
// MakeSphere helper
//---------------------------------------------------------------------
static void    MakeSphere(
VERTEX* pVertices,
WORD* pwIndices,
float fRadius,
UINT uSlices,
UINT uStacks )
{
    UINT i, j;


    // Sin/Cos caches
    float sinI[CACHE_SIZE], cosI[CACHE_SIZE];
    float sinJ[CACHE_SIZE], cosJ[CACHE_SIZE];

    for( i = 0; i < uSlices; i++ )
        sincosf( 2.0f * D3DX_PI * i / uSlices, sinI + i, cosI + i );

    for( j = 0; j < uStacks; j++ )
        sincosf( D3DX_PI * j / uStacks, sinJ + j, cosJ + j );



    // Generate vertices
    VERTEX* pVertex = pVertices;

    // +Z pole
    pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, fRadius );
    pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
    pVertex++;

    // Stacks
    for( j = 1; j < uStacks; j++ )
    {
        for( i = 0; i < uSlices; i++ )
        {
            D3DXVECTOR3 norm( sinI[i]* sinJ[j], cosI[i]* sinJ[j], cosJ[j] );

            pVertex->pos = norm * fRadius;
            pVertex->norm = norm;

            pVertex++;
        }
    }

    // Z- pole
    pVertex->pos = D3DXVECTOR3( 0.0f, 0.0f, -fRadius );
    pVertex->norm = D3DXVECTOR3( 0.0f, 0.0f, -1.0f );
    pVertex++;



    // Generate indices
    WORD* pwFace = pwIndices;
    UINT uRowA, uRowB;

    // Z+ pole
    uRowA = 0;
    uRowB = 1;

    for( i = 0; i < uSlices - 1; i++ )
    {
        pwFace[0] = ( WORD )( uRowA );
        pwFace[1] = ( WORD )( uRowB + i + 1 );
        pwFace[2] = ( WORD )( uRowB + i );
        pwFace += 3;
    }

    pwFace[0] = ( WORD )( uRowA );
    pwFace[1] = ( WORD )( uRowB );
    pwFace[2] = ( WORD )( uRowB + i );
    pwFace += 3;

    // Interior stacks
    for( j = 1; j < uStacks - 1; j++ )
    {
        uRowA = 1 + ( j - 1 ) * uSlices;
        uRowB = uRowA + uSlices;

        for( i = 0; i < uSlices - 1; i++ )
        {
            pwFace[0] = ( WORD )( uRowA + i );
            pwFace[1] = ( WORD )( uRowA + i + 1 );
            pwFace[2] = ( WORD )( uRowB + i );
            pwFace += 3;

            pwFace[0] = ( WORD )( uRowA + i + 1 );
            pwFace[1] = ( WORD )( uRowB + i + 1 );
            pwFace[2] = ( WORD )( uRowB + i );
            pwFace += 3;
        }

        pwFace[0] = ( WORD )( uRowA + i );
        pwFace[1] = ( WORD )( uRowA );
        pwFace[2] = ( WORD )( uRowB + i );
        pwFace += 3;

        pwFace[0] = ( WORD )( uRowA );
        pwFace[1] = ( WORD )( uRowB );
        pwFace[2] = ( WORD )( uRowB + i );
        pwFace += 3;
    }

    // Z- pole
    uRowA = 1 + ( uStacks - 2 ) * uSlices;
    uRowB = uRowA + uSlices;

    for( i = 0; i < uSlices - 1; i++ )
    {
        pwFace[0] = ( WORD )( uRowA + i );
        pwFace[1] = ( WORD )( uRowA + i + 1 );
        pwFace[2] = ( WORD )( uRowB );
        pwFace += 3;
    }

    pwFace[0] = ( WORD )( uRowA + i );
    pwFace[1] = ( WORD )( uRowA );
    pwFace[2] = ( WORD )( uRowB );
    pwFace += 3;
}


//----------------------------------------------------------------------------
// DXUTCreateSphere - create a sphere mesh
//----------------------------------------------------------------------------
HRESULT WINAPI DXUTCreateSphere( ID3D10Device* pDevice, float fRadius, UINT uSlices, UINT uStacks,
                                 ID3DX10Mesh** ppMesh )
{
    HRESULT hr = S_OK;

    WORD* pwIndices = NULL;
    VERTEX* pVertices = NULL;

    // Set up the defaults
    if( D3DX_DEFAULT_FLOAT == fRadius )
        fRadius = 1.0f;
    if( D3DX_DEFAULT == uSlices )
        uSlices = 8;
    if( D3DX_DEFAULT == uStacks )
        uStacks = 8;

    // Validate parameters
    if( !pDevice )
        return D3DERR_INVALIDCALL;
    if( !ppMesh )
        return D3DERR_INVALIDCALL;
    if( fRadius < 0.0f )
        return D3DERR_INVALIDCALL;
    if( uSlices < 2 )
        return D3DERR_INVALIDCALL;
    if( uStacks < 2 )
        return D3DERR_INVALIDCALL;

    if( uSlices > CACHE_SIZE )
        uSlices = CACHE_SIZE;
    if( uStacks > CACHE_SIZE )
        uStacks = CACHE_SIZE;

    // Create the mesh
    UINT cFaces = 2 * ( uStacks - 1 ) * uSlices;
    UINT cVertices = ( uStacks - 1 ) * uSlices + 2;

    // Create enough memory for the vertices and indices
    pVertices = new VERTEX[ cVertices ];
    if( !pVertices )
        return E_OUTOFMEMORY;
    pwIndices = new WORD[ cFaces * 3 ];
    if( !pwIndices )
        return E_OUTOFMEMORY;

    // Create a sphere
    MakeSphere( pVertices, pwIndices, fRadius, uSlices, uStacks );

    // Create a mesh
    hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 );

    // Free up the memory
    SAFE_DELETE_ARRAY( pVertices );
    SAFE_DELETE_ARRAY( pwIndices );

    return hr;
}


//---------------------------------------------------------------------
// MakeTorus helper
//---------------------------------------------------------------------
static void    MakeTorus(
VERTEX* pVertices,
WORD* pwIndices,
float fInnerRadius,
float fOuterRadius,
UINT uSides,
UINT uRings )
{
    UINT i, j;

    //
    // Compute the vertices
    //

    VERTEX* pVertex = pVertices;

    for( i = 0; i < uRings; i++ )
    {
        float theta = ( float )i * 2.0f * D3DX_PI / ( float )uRings;
        float st, ct;

        sincosf( theta, &st, &ct );

        for( j = 0; j < uSides; j++ )
        {
            float phi = ( float )j * 2.0f * D3DX_PI / uSides;
            float sp, cp;

            sincosf( phi, &sp, &cp );

            pVertex->pos.x = ct * ( fOuterRadius + fInnerRadius * cp );
            pVertex->pos.y = -st * ( fOuterRadius + fInnerRadius * cp );
            pVertex->pos.z = sp * fInnerRadius;

            pVertex->norm.x = ct * cp;
            pVertex->norm.y = -st * cp;
            pVertex->norm.z = sp;

            pVertex++;
        }
    }

    //
    // Compute the indices: 
    // There are uRings * uSides faces
    // Each face has 2 triangles (6 indices)
    //

    // Tube i has indices:  
    //        Left Edge: i*(uSides+1) -- i*(uSides+1)+uSides
    //        Right Edge: (i+1)*(uSides+1) -- (i+1)*(uSides+1)+uSides
    //
    // Face j on tube i has the 4 indices:
    //        Left Edge: i*(uSides+1)+j -- i*(uSides+1)+j+1
    //        Right Edge: (i+1)*(uSides+1)+j -- (i+1)*(uSides+1)+j+1
    //
    WORD* pwFace = pwIndices;

    for( i = 0; i < uRings - 1; i++ )
    {
        for( j = 0; j < uSides - 1; j++ )
        {

            // Tri 1 (Top-Left tri, CCW)
            pwFace[0] = ( WORD )( i * uSides + j );
            pwFace[1] = ( WORD )( i * uSides + j + 1 );
            pwFace[2] = ( WORD )( ( i + 1 ) * uSides + j );
            pwFace += 3;

            // Tri 2 (Bottom-Right tri, CCW)
            pwFace[0] = ( WORD )( ( i + 1 ) * uSides + j );
            pwFace[1] = ( WORD )( i * uSides + j + 1 );
            pwFace[2] = ( WORD )( ( i + 1 ) * uSides + j + 1 );
            pwFace += 3;
        }

        // Tri 1 (Top-Left tri, CCW)
        pwFace[0] = ( WORD )( i * uSides + j );
        pwFace[1] = ( WORD )( i * uSides );
        pwFace[2] = ( WORD )( ( i + 1 ) * uSides + j );
        pwFace += 3;

        // Tri 2 (Bottom-Right tri, CCW)
        pwFace[0] = ( WORD )( ( i + 1 ) * uSides + j );
        pwFace[1] = ( WORD )( i * uSides + 0 );
        pwFace[2] = ( WORD )( ( i + 1 ) * uSides + 0 );
        pwFace += 3;
    }


    // join the two ends of the tube
    for( j = 0; j < uSides - 1; j++ )
    {
        // Tri 1 (Top-Left tri, CCW)
        pwFace[0] = ( WORD )( i * uSides + j );
        pwFace[1] = ( WORD )( i * uSides + j + 1 );
        pwFace[2] = ( WORD )( j );
        pwFace += 3;

        // Tri 2 (Bottom-Right tri, CCW)
        pwFace[0] = ( WORD )( j );
        pwFace[1] = ( WORD )( i * uSides + j + 1 );
        pwFace[2] = ( WORD )( j + 1 );
        pwFace += 3;
    }

    // Tri 1 (Top-Left tri, CCW)
    pwFace[0] = ( WORD )( i * uSides + j );
    pwFace[1] = ( WORD )( i * uSides );
    pwFace[2] = ( WORD )( j );
    pwFace += 3;

    // Tri 2 (Bottom-Right tri, CCW)
    pwFace[0] = ( WORD )( j );
    pwFace[1] = ( WORD )( i * uSides );
    pwFace[2] = ( WORD )( 0 );
    pwFace += 3;
}


//----------------------------------------------------------------------------
// DXUTCreateTorus - create a torus mesh
//----------------------------------------------------------------------------
HRESULT WINAPI DXUTCreateTorus( ID3D10Device* pDevice, float fInnerRadius, float fOuterRadius, UINT uSides,
                                UINT uRings, ID3DX10Mesh** ppMesh )
{
    HRESULT hr = S_OK;

    WORD* pwIndices = NULL;
    VERTEX* pVertices = NULL;


    // Set up the defaults
    if( D3DX_DEFAULT_FLOAT == fInnerRadius )
        fInnerRadius = 1.0f;
    if( D3DX_DEFAULT_FLOAT == fOuterRadius )
        fOuterRadius = 2.0f;
    if( D3DX_DEFAULT == uSides )
        uSides = 8;
    if( D3DX_DEFAULT == uRings )
        uRings = 15;

    // Validate parameters
    if( !pDevice )
        return D3DERR_INVALIDCALL;
    if( !ppMesh )
        return D3DERR_INVALIDCALL;
    if( fInnerRadius < 0.0f )
        return D3DERR_INVALIDCALL;
    if( fOuterRadius < 0.0f )
        return D3DERR_INVALIDCALL;
    if( uSides < 3 )
        return D3DERR_INVALIDCALL;
    if( uRings < 3 )
        return D3DERR_INVALIDCALL;

    // Create the mesh
    UINT cFaces = 2 * uSides * uRings;
    UINT cVertices = uRings * uSides;

    // Create enough memory for the vertices and indices
    pVertices = new VERTEX[ cVertices ];
    if( !pVertices )
        return E_OUTOFMEMORY;
    pwIndices = new WORD[ cFaces * 3 ];
    if( !pwIndices )
        return E_OUTOFMEMORY;

    // Create a torus
    MakeTorus( pVertices, pwIndices, fInnerRadius, fOuterRadius,
               uSides, uRings );

    // Create a mesh
    hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 );

    // Free up the memory
    SAFE_DELETE_ARRAY( pVertices );
    SAFE_DELETE_ARRAY( pwIndices );

    return hr;
}


//----------------------------------------------------------------------------
// Teapot data
//----------------------------------------------------------------------------
#define NUMTEAPOTVERTICES 1178
#define NUMTEAPOTINDICES 6768

static float teapotPositionsFloats[NUMTEAPOTVERTICES*3] =
{
    0.678873f, 0.330678f, 0.000000f,
    0.669556f, 0.358022f, 0.000000f,
    0.671003f, 0.374428f, 0.000000f,
    0.680435f, 0.379897f, 0.000000f,
    0.695077f, 0.374428f, 0.000000f,
    0.712148f, 0.358022f, 0.000000f,
    0.728873f, 0.330678f, 0.000000f,
    0.654243f, 0.330678f, 0.187963f,
    0.645254f, 0.358022f, 0.185461f,
    0.646650f, 0.374428f, 0.185850f,
    0.655751f, 0.379897f, 0.188383f,
    0.669877f, 0.374428f, 0.192314f,
    0.686348f, 0.358022f, 0.196898f,
    0.702484f, 0.330678f, 0.201389f,
    0.584502f, 0.330678f, 0.355704f,
    0.576441f, 0.358022f, 0.350969f,
    0.577693f, 0.374428f, 0.351704f,
    0.585854f, 0.379897f, 0.356498f,
    0.598522f, 0.374428f, 0.363938f,
    0.613292f, 0.358022f, 0.372613f,
    0.627762f, 0.330678f, 0.381111f,
    0.475873f, 0.330678f, 0.497000f,
    0.469258f, 0.358022f, 0.490385f,
    0.470285f, 0.374428f, 0.491412f,
    0.476982f, 0.379897f, 0.498109f,
    0.487377f, 0.374428f, 0.508505f,
    0.499498f, 0.358022f, 0.520626f,
    0.511373f, 0.330678f, 0.532500f,
    0.334576f, 0.330678f, 0.605630f,
    0.329842f, 0.358022f, 0.597569f,
    0.330577f, 0.374428f, 0.598820f,
    0.335370f, 0.379897f, 0.606982f,
    0.342810f, 0.374428f, 0.619649f,
    0.351485f, 0.358022f, 0.634419f,
    0.359984f, 0.330678f, 0.648889f,
    0.166836f, 0.330678f, 0.675370f,
    0.164334f, 0.358022f, 0.666381f,
    0.164722f, 0.374428f, 0.667777f,
    0.167255f, 0.379897f, 0.676878f,
    0.171187f, 0.374428f, 0.691004f,
    0.175771f, 0.358022f, 0.707475f,
    0.180262f, 0.330678f, 0.723611f,
    -0.021127f, 0.330678f, 0.700000f,
    -0.021127f, 0.358022f, 0.690683f,
    -0.021127f, 0.374428f, 0.692130f,
    -0.021127f, 0.379897f, 0.701563f,
    -0.021127f, 0.374428f, 0.716204f,
    -0.021127f, 0.358022f, 0.733276f,
    -0.021127f, 0.330678f, 0.750000f,
    -0.224715f, 0.330678f, 0.675370f,
    -0.215631f, 0.358022f, 0.666381f,
    -0.211606f, 0.374428f, 0.667777f,
    -0.211463f, 0.379897f, 0.676878f,
    -0.214020f, 0.374428f, 0.691004f,
    -0.218098f, 0.358022f, 0.707475f,
    -0.222516f, 0.330678f, 0.723611f,
    -0.396831f, 0.330678f, 0.605630f,
    -0.383671f, 0.358022f, 0.597569f,
    -0.378758f, 0.374428f, 0.598820f,
    -0.380125f, 0.379897f, 0.606982f,
    -0.385806f, 0.374428f, 0.619649f,
    -0.393832f, 0.358022f, 0.634419f,
    -0.402238f, 0.330678f, 0.648889f,
    -0.535002f, 0.330678f, 0.497000f,
    -0.521278f, 0.358022f, 0.490385f,
    -0.517539f, 0.374428f, 0.491412f,
    -0.521346f, 0.379897f, 0.498109f,
    -0.530257f, 0.374428f, 0.508505f,
    -0.541831f, 0.358022f, 0.520626f,
    -0.553627f, 0.330678f, 0.532500f,
    -0.636757f, 0.330678f, 0.355704f,
    -0.624483f, 0.358022f, 0.350969f,
    -0.622910f, 0.374428f, 0.351704f,
    -0.629359f, 0.379897f, 0.356498f,
    -0.641146f, 0.374428f, 0.363938f,
    -0.655593f, 0.358022f, 0.372613f,
    -0.670016f, 0.330678f, 0.381111f,
    -0.699623f, 0.330678f, 0.187963f,
    -0.689317f, 0.358022f, 0.185461f,
    -0.689830f, 0.374428f, 0.185850f,
    -0.698396f, 0.379897f, 0.188382f,
    -0.712247f, 0.374428f, 0.192314f,
    -0.728617f, 0.358022f, 0.196898f,
    -0.744738f, 0.330678f, 0.201389f,
    -0.721127f, 0.330678f, 0.000000f,
    -0.711810f, 0.358022f, 0.000000f,
    -0.713257f, 0.374428f, 0.000000f,
    -0.722690f, 0.379897f, 0.000000f,
    -0.737331f, 0.374428f, 0.000000f,
    -0.754403f, 0.358022f, 0.000000f,
    -0.771127f, 0.330678f, 0.000000f,
    -0.696498f, 0.330678f, -0.187963f,
    -0.687508f, 0.358022f, -0.185461f,
    -0.688904f, 0.374428f, -0.185850f,
    -0.698005f, 0.379897f, -0.188383f,
    -0.712131f, 0.374428f, -0.192314f,
    -0.728602f, 0.358022f, -0.196898f,
    -0.744738f, 0.330678f, -0.201389f,
    -0.626757f, 0.330678f, -0.355704f,
    -0.618696f, 0.358022f, -0.350969f,
    -0.619948f, 0.374428f, -0.351704f,
    -0.628109f, 0.379897f, -0.356498f,
    -0.640776f, 0.374428f, -0.363938f,
    -0.655546f, 0.358022f, -0.372613f,
    -0.670016f, 0.330678f, -0.381111f,
    -0.518127f, 0.330678f, -0.497000f,
    -0.511512f, 0.358022f, -0.490385f,
    -0.512539f, 0.374428f, -0.491412f,
    -0.519237f, 0.379897f, -0.498109f,
    -0.529632f, 0.374428f, -0.508505f,
    -0.541753f, 0.358022f, -0.520626f,
    -0.553627f, 0.330678f, -0.532500f,
    -0.376831f, 0.330678f, -0.605630f,
    -0.372096f, 0.358022f, -0.597569f,
    -0.372832f, 0.374428f, -0.598820f,
    -0.377625f, 0.379897f, -0.606982f,
    -0.385065f, 0.374428f, -0.619649f,
    -0.393740f, 0.358022f, -0.634419f,
    -0.402238f, 0.330678f, -0.648889f,
    -0.209090f, 0.330678f, -0.675370f,
    -0.206588f, 0.358022f, -0.666381f,
    -0.206977f, 0.374428f, -0.667777f,
    -0.209510f, 0.379897f, -0.676878f,
    -0.213441f, 0.374428f, -0.691004f,
    -0.218025f, 0.358022f, -0.707475f,
    -0.222516f, 0.330678f, -0.723611f,
    -0.021127f, 0.330678f, -0.700000f,
    -0.021127f, 0.358022f, -0.690683f,
    -0.021127f, 0.374428f, -0.692130f,
    -0.021127f, 0.379897f, -0.701563f,
    -0.021127f, 0.374428f, -0.716204f,
    -0.021127f, 0.358022f, -0.733276f,
    -0.021127f, 0.330678f, -0.750000f,
    0.166836f, 0.330678f, -0.675370f,
    0.164334f, 0.358022f, -0.666381f,
    0.164722f, 0.374428f, -0.667777f,
    0.167255f, 0.379897f, -0.676878f,
    0.171187f, 0.374428f, -0.691004f,
    0.175771f, 0.358022f, -0.707475f,
    0.180262f, 0.330678f, -0.723611f,
    0.334576f, 0.330678f, -0.605630f,
    0.329842f, 0.358022f, -0.597569f,
    0.330577f, 0.374428f, -0.598820f,
    0.335370f, 0.379897f, -0.606982f,
    0.342810f, 0.374428f, -0.619649f,
    0.351485f, 0.358022f, -0.634419f,
    0.359984f, 0.330678f, -0.648889f,
    0.475873f, 0.330678f, -0.497000f,
    0.469258f, 0.358022f, -0.490385f,
    0.470285f, 0.374428f, -0.491412f,
    0.476982f, 0.379897f, -0.498109f,
    0.487377f, 0.374428f, -0.508505f,
    0.499498f, 0.358022f, -0.520626f,
    0.511373f, 0.330678f, -0.532500f,
    0.584502f, 0.330678f, -0.355704f,
    0.576441f, 0.358022f, -0.350969f,
    0.577693f, 0.374428f, -0.351704f,
    0.585854f, 0.379897f, -0.356498f,
    0.598522f, 0.374428f, -0.363938f,
    0.613292f, 0.358022f, -0.372613f,
    0.627762f, 0.330678f, -0.381111f,
    0.654243f, 0.330678f, -0.187963f,
    0.645254f, 0.358022f, -0.185461f,
    0.646650f, 0.374428f, -0.185850f,
    0.655751f, 0.379897f, -0.188382f,
    0.669877f, 0.374428f, -0.192314f,
    0.686348f, 0.358022f, -0.196898f,
    0.702484f, 0.330678f, -0.201389f,
    0.790794f, 0.199602f, 0.000000f,
    0.849243f, 0.069567f, 0.000000f,
    0.900748f, -0.058384f, 0.000000f,
    0.941836f, -0.183211f, 0.000000f,
    0.969035f, -0.303870f, 0.000000f,
    0.978873f, -0.419322f, 0.000000f,
    0.762227f, 0.199602f, 0.218016f,
    0.818619f, 0.069567f, 0.233711f,
    0.868312f, -0.058384f, 0.247541f,
    0.907954f, -0.183211f, 0.258573f,
    0.934196f, -0.303870f, 0.265877f,
    0.943688f, -0.419322f, 0.268519f,
    0.681335f, 0.199602f, 0.412576f,
    0.731904f, 0.069567f, 0.442277f,
    0.776465f, -0.058384f, 0.468449f,
    0.812014f, -0.183211f, 0.489328f,
    0.835546f, -0.303870f, 0.503149f,
    0.844058f, -0.419322f, 0.508148f,
    0.555337f, 0.199602f, 0.576464f,
    0.596836f, 0.069567f, 0.617963f,
    0.633404f, -0.058384f, 0.654531f,
    0.662577f, -0.183211f, 0.683704f,
    0.681888f, -0.303870f, 0.703015f,
    0.688873f, -0.419322f, 0.710000f,
    0.391449f, 0.199602f, 0.702462f,
    0.421150f, 0.069567f, 0.753032f,
    0.447322f, -0.058384f, 0.797593f,
    0.468201f, -0.183211f, 0.833141f,
    0.482022f, -0.303870f, 0.856674f,
    0.487021f, -0.419322f, 0.865185f,
    0.196889f, 0.199602f, 0.783354f,
    0.212583f, 0.069567f, 0.839746f,
    0.226413f, -0.058384f, 0.889439f,
    0.237446f, -0.183211f, 0.929081f,
    0.244750f, -0.303870f, 0.955323f,
    0.247391f, -0.419322f, 0.964815f,
    -0.021127f, 0.199602f, 0.811921f,
    -0.021127f, 0.069567f, 0.870370f,
    -0.021127f, -0.058384f, 0.921875f,
    -0.021127f, -0.183211f, 0.962963f,
    -0.021127f, -0.303870f, 0.990162f,
    -0.021127f, -0.419322f, 1.000000f,
    -0.239143f, 0.199602f, 0.783354f,
    -0.254838f, 0.069567f, 0.839746f,
    -0.268668f, -0.058384f, 0.889439f,
    -0.279701f, -0.183211f, 0.929081f,
    -0.287004f, -0.303870f, 0.955323f,
    -0.289646f, -0.419322f, 0.964815f,
    -0.433704f, 0.199602f, 0.702462f,
    -0.463404f, 0.069567f, 0.753032f,
    -0.489576f, -0.058384f, 0.797593f,
    -0.510455f, -0.183211f, 0.833141f,
    -0.524276f, -0.303870f, 0.856674f,
    -0.529275f, -0.419322f, 0.865185f,
    -0.597591f, 0.199602f, 0.576464f,
    -0.639090f, 0.069567f, 0.617963f,
    -0.675658f, -0.058384f, 0.654531f,
    -0.704831f, -0.183211f, 0.683704f,
    -0.724142f, -0.303870f, 0.703015f,
    -0.731127f, -0.419322f, 0.710000f,
    -0.723589f, 0.199602f, 0.412576f,
    -0.774159f, 0.069567f, 0.442277f,
    -0.818720f, -0.058384f, 0.468449f,
    -0.854269f, -0.183211f, 0.489328f,
    -0.877801f, -0.303870f, 0.503149f,
    -0.886312f, -0.419322f, 0.508148f,
    -0.804481f, 0.199602f, 0.218016f,
    -0.860873f, 0.069567f, 0.233711f,
    -0.910566f, -0.058384f, 0.247540f,
    -0.950208f, -0.183211f, 0.258573f,
    -0.976450f, -0.303870f, 0.265877f,
    -0.985942f, -0.419322f, 0.268518f,
    -0.833049f, 0.199602f, 0.000000f,
    -0.891498f, 0.069567f, 0.000000f,
    -0.943002f, -0.058384f, 0.000000f,
    -0.984090f, -0.183211f, 0.000000f,
    -1.011289f, -0.303870f, 0.000000f,
    -1.021127f, -0.419322f, 0.000000f,
    -0.804481f, 0.199602f, -0.218016f,
    -0.860873f, 0.069567f, -0.233711f,
    -0.910566f, -0.058384f, -0.247541f,
    -0.950208f, -0.183211f, -0.258573f,
    -0.976450f, -0.303870f, -0.265877f,
    -0.985942f, -0.419322f, -0.268519f,
    -0.723589f, 0.199602f, -0.412576f,
    -0.774159f, 0.069567f, -0.442277f,
    -0.818720f, -0.058384f, -0.468449f,
    -0.854269f, -0.183211f, -0.489328f,
    -0.877801f, -0.303870f, -0.503149f,
    -0.886312f, -0.419322f, -0.508148f,
    -0.597591f, 0.199602f, -0.576464f,
    -0.639090f, 0.069567f, -0.617963f,
    -0.675658f, -0.058384f, -0.654531f,
    -0.704831f, -0.183211f, -0.683704f,
    -0.724142f, -0.303870f, -0.703015f,
    -0.731127f, -0.419322f, -0.710000f,
    -0.433704f, 0.199602f, -0.702462f,
    -0.463404f, 0.069567f, -0.753032f,
    -0.489576f, -0.058384f, -0.797593f,
    -0.510455f, -0.183211f, -0.833141f,
    -0.524276f, -0.303870f, -0.856674f,
    -0.529275f, -0.419322f, -0.865185f,
    -0.239143f, 0.199602f, -0.783354f,
    -0.254838f, 0.069567f, -0.839746f,
    -0.268668f, -0.058384f, -0.889439f,
    -0.279701f, -0.183211f, -0.929081f,
    -0.287004f, -0.303870f, -0.955323f,
    -0.289646f, -0.419322f, -0.964815f,
    -0.021127f, 0.199602f, -0.811921f,
    -0.021127f, 0.069567f, -0.870370f,
    -0.021127f, -0.058384f, -0.921875f,
    -0.021127f, -0.183211f, -0.962963f,
    -0.021127f, -0.303870f, -0.990162f,
    -0.021127f, -0.419322f, -1.000000f,
    0.196889f, 0.199602f, -0.783354f,
    0.212583f, 0.069567f, -0.839746f,
    0.226413f, -0.058384f, -0.889439f,
    0.237446f, -0.183211f, -0.929081f,
    0.244750f, -0.303870f, -0.955323f,
    0.247391f, -0.419322f, -0.964815f,
    0.391449f, 0.199602f, -0.702462f,
    0.421150f, 0.069567f, -0.753032f,
    0.447322f, -0.058384f, -0.797593f,
    0.468201f, -0.183211f, -0.833141f,
    0.482022f, -0.303870f, -0.856674f,
    0.487021f, -0.419322f, -0.865185f,
    0.555337f, 0.199602f, -0.576464f,
    0.596836f, 0.069567f, -0.617963f,
    0.633404f, -0.058384f, -0.654531f,
    0.662577f, -0.183211f, -0.683704f,
    0.681888f, -0.303870f, -0.703015f,
    0.688873f, -0.419322f, -0.710000f,
    0.681335f, 0.199602f, -0.412576f,
    0.731904f, 0.069567f, -0.442277f,
    0.776465f, -0.058384f, -0.468449f,
    0.812014f, -0.183211f, -0.489328f,
    0.835546f, -0.303870f, -0.503149f,
    0.844058f, -0.419322f, -0.508148f,
    0.762227f, 0.199602f, -0.218016f,
    0.818619f, 0.069567f, -0.233711f,
    0.868312f, -0.058384f, -0.247540f,
    0.907954f, -0.183211f, -0.258573f,
    0.934196f, -0.303870f, -0.265877f,
    0.943688f, -0.419322f, -0.268518f,
    0.960354f, -0.522620f, 0.000000f,
    0.914058f, -0.608211f, 0.000000f,
    0.853873f, -0.677134f, 0.000000f,
    0.793688f, -0.730433f, 0.000000f,
    0.747391f, -0.769148f, 0.000000f,
    0.728873f, -0.794322f, 0.000000f,
    0.925821f, -0.522620f, 0.263546f,
    0.881153f, -0.608211f, 0.251115f,
    0.823086f, -0.677134f, 0.234954f,
    0.765018f, -0.730433f, 0.218793f,
    0.720351f, -0.769148f, 0.206361f,
    0.702484f, -0.794322f, 0.201389f,
    0.828036f, -0.522620f, 0.498738f,
    0.787981f, -0.608211f, 0.475213f,
    0.735910f, -0.677134f, 0.444630f,
    0.683839f, -0.730433f, 0.414047f,
    0.643784f, -0.769148f, 0.390521f,
    0.627762f, -0.794322f, 0.381111f,
    0.675725f, -0.522620f, 0.696852f,
    0.642854f, -0.608211f, 0.663981f,
    0.600123f, -0.677134f, 0.621250f,
    0.557391f, -0.730433f, 0.578519f,
    0.524521f, -0.769148f, 0.545648f,
    0.511373f, -0.794322f, 0.532500f,
    0.477611f, -0.522620f, 0.849163f,
    0.454085f, -0.608211f, 0.809108f,
    0.423502f, -0.677134f, 0.757037f,
    0.392919f, -0.730433f, 0.704966f,
    0.369394f, -0.769148f, 0.664911f,
    0.359984f, -0.794322f, 0.648889f,
    0.242419f, -0.522620f, 0.946948f,
    0.229987f, -0.608211f, 0.902281f,
    0.213826f, -0.677134f, 0.844213f,
    0.197666f, -0.730433f, 0.786145f,
    0.185234f, -0.769148f, 0.741478f,
    0.180262f, -0.794322f, 0.723611f,
    -0.021127f, -0.522620f, 0.981482f,
    -0.021127f, -0.608211f, 0.935185f,
    -0.021127f, -0.677134f, 0.875000f,
    -0.021127f, -0.730433f, 0.814815f,
    -0.021127f, -0.769148f, 0.768519f,
    -0.021127f, -0.794322f, 0.750000f,
    -0.284673f, -0.522620f, 0.946948f,
    -0.272242f, -0.608211f, 0.902281f,
    -0.256081f, -0.677134f, 0.844213f,
    -0.239920f, -0.730433f, 0.786145f,
    -0.227489f, -0.769148f, 0.741478f,
    -0.222516f, -0.794322f, 0.723611f,
    -0.519865f, -0.522620f, 0.849163f,
    -0.496340f, -0.608211f, 0.809108f,
    -0.465757f, -0.677134f, 0.757037f,
    -0.435174f, -0.730433f, 0.704966f,
    -0.411649f, -0.769148f, 0.664911f,
    -0.402238f, -0.794322f, 0.648889f,
    -0.717979f, -0.522620f, 0.696852f,
    -0.685109f, -0.608211f, 0.663981f,
    -0.642377f, -0.677134f, 0.621250f,
    -0.599646f, -0.730433f, 0.578519f,
    -0.566775f, -0.769148f, 0.545648f,
    -0.553627f, -0.794322f, 0.532500f,
    -0.870290f, -0.522620f, 0.498738f,
    -0.830236f, -0.608211f, 0.475213f,
    -0.778164f, -0.677134f, 0.444630f,
    -0.726093f, -0.730433f, 0.414047f,
    -0.686038f, -0.769148f, 0.390521f,
    -0.670016f, -0.794322f, 0.381111f,
    -0.968075f, -0.522620f, 0.263546f,
    -0.923408f, -0.608211f, 0.251115f,
    -0.865340f, -0.677134f, 0.234954f,
    -0.807273f, -0.730433f, 0.218793f,
    -0.762605f, -0.769148f, 0.206361f,
    -0.744738f, -0.794322f, 0.201389f,
    -1.002609f, -0.522620f, 0.000000f,
    -0.956312f, -0.608211f, 0.000000f,
    -0.896127f, -0.677134f, 0.000000f,
    -0.835942f, -0.730433f, 0.000000f,
    -0.789646f, -0.769148f, 0.000000f,
    -0.771127f, -0.794322f, 0.000000f,
    -0.968075f, -0.522620f, -0.263546f,
    -0.923408f, -0.608211f, -0.251115f,
    -0.865340f, -0.677134f, -0.234954f,
    -0.807273f, -0.730433f, -0.218793f,
    -0.762605f, -0.769148f, -0.206361f,
    -0.744738f, -0.794322f, -0.201389f,
    -0.870290f, -0.522620f, -0.498738f,
    -0.830236f, -0.608211f, -0.475213f,
    -0.778164f, -0.677134f, -0.444630f,
    -0.726093f, -0.730433f, -0.414047f,
    -0.686038f, -0.769148f, -0.390521f,
    -0.670016f, -0.794322f, -0.381111f,
    -0.717979f, -0.522620f, -0.696852f,
    -0.685109f, -0.608211f, -0.663981f,
    -0.642377f, -0.677134f, -0.621250f,
    -0.599646f, -0.730433f, -0.578519f,
    -0.566775f, -0.769148f, -0.545648f,
    -0.553627f, -0.794322f, -0.532500f,
    -0.519865f, -0.522620f, -0.849163f,
    -0.496340f, -0.608211f, -0.809108f,
    -0.465757f, -0.677134f, -0.757037f,
    -0.435174f, -0.730433f, -0.704966f,
    -0.411648f, -0.769148f, -0.664911f,
    -0.402238f, -0.794322f, -0.648889f,
    -0.284673f, -0.522620f, -0.946948f,
    -0.272242f, -0.608211f, -0.902281f,
    -0.256081f, -0.677134f, -0.844213f,
    -0.239920f, -0.730433f, -0.786145f,
    -0.227489f, -0.769148f, -0.741478f,
    -0.222516f, -0.794322f, -0.723611f,
    -0.021127f, -0.522620f, -0.981482f,
    -0.021127f, -0.608211f, -0.935185f,
    -0.021127f, -0.677134f, -0.875000f,
    -0.021127f, -0.730433f, -0.814815f,
    -0.021127f, -0.769148f, -0.768519f,
    -0.021127f, -0.794322f, -0.750000f,
    0.242419f, -0.522620f, -0.946948f,
    0.229987f, -0.608211f, -0.902281f,
    0.213827f, -0.677134f, -0.844213f,
    0.197666f, -0.730433f, -0.786145f,
    0.185234f, -0.769148f, -0.741478f,
    0.180262f, -0.794322f, -0.723611f,
    0.477611f, -0.522620f, -0.849163f,
    0.454085f, -0.608211f, -0.809108f,
    0.423502f, -0.677134f, -0.757037f,
    0.392919f, -0.730433f, -0.704966f,
    0.369394f, -0.769148f, -0.664911f,
    0.359984f, -0.794322f, -0.648889f,
    0.675725f, -0.522620f, -0.696852f,
    0.642854f, -0.608211f, -0.663981f,
    0.600123f, -0.677134f, -0.621250f,
    0.557391f, -0.730433f, -0.578519f,
    0.524521f, -0.769148f, -0.545648f,
    0.511373f, -0.794322f, -0.532500f,
    0.828036f, -0.522620f, -0.498738f,
    0.787981f, -0.608211f, -0.475213f,
    0.735910f, -0.677134f, -0.444630f,
    0.683839f, -0.730433f, -0.414047f,
    0.643784f, -0.769148f, -0.390521f,
    0.627762f, -0.794322f, -0.381111f,
    0.925821f, -0.522620f, -0.263546f,
    0.881153f, -0.608211f, -0.251115f,
    0.823086f, -0.677134f, -0.234954f,
    0.765018f, -0.730433f, -0.218793f,
    0.720351f, -0.769148f, -0.206361f,
    0.702484f, -0.794322f, -0.201389f,
    0.722796f, -0.812898f, 0.000000f,
    0.692762f, -0.830433f, 0.000000f,
    0.621060f, -0.845884f, 0.000000f,
    0.489984f, -0.858211f, 0.000000f,
    0.281824f, -0.866370f, 0.000000f,
    -0.021127f, -0.869322f, 0.000000f,
    0.696621f, -0.812898f, 0.199757f,
    0.667643f, -0.830433f, 0.191692f,
    0.598465f, -0.845884f, 0.172439f,
    0.472000f, -0.858211f, 0.137243f,
    0.271165f, -0.866370f, 0.081348f,
    0.622505f, -0.812898f, 0.378023f,
    0.596519f, -0.830433f, 0.362761f,
    0.534484f, -0.845884f, 0.326326f,
    0.421079f, -0.858211f, 0.259720f,
    0.240982f, -0.866370f, 0.153944f,
    0.507059f, -0.812898f, 0.528186f,
    0.485734f, -0.830433f, 0.506861f,
    0.434826f, -0.845884f, 0.455953f,
    0.341762f, -0.858211f, 0.362889f,
    0.193968f, -0.866370f, 0.215095f,
    0.356896f, -0.812898f, 0.643632f,
    0.341634f, -0.830433f, 0.617646f,
    0.305199f, -0.845884f, 0.555611f,
    0.238593f, -0.858211f, 0.442206f,
    0.132817f, -0.866370f, 0.262109f,
    0.178630f, -0.812898f, 0.717749f,
    0.170565f, -0.830433f, 0.688771f,
    0.151312f, -0.845884f, 0.619592f,
    0.116116f, -0.858211f, 0.493128f,
    0.060221f, -0.866370f, 0.292292f,
    -0.021127f, -0.812898f, 0.743924f,
    -0.021127f, -0.830433f, 0.713889f,
    -0.021127f, -0.845884f, 0.642188f,
    -0.021127f, -0.858211f, 0.511111f,
    -0.021127f, -0.866370f, 0.302951f,
    -0.220884f, -0.812898f, 0.717749f,
    -0.212820f, -0.830433f, 0.688771f,
    -0.193566f, -0.845884f, 0.619592f,
    -0.158370f, -0.858211f, 0.493128f,
    -0.102475f, -0.866370f, 0.292292f,
    -0.399151f, -0.812898f, 0.643632f,
    -0.383889f, -0.830433f, 0.617646f,
    -0.347454f, -0.845884f, 0.555611f,
    -0.280847f, -0.858211f, 0.442206f,
    -0.175071f, -0.866370f, 0.262109f,
    -0.549313f, -0.812898f, 0.528186f,
    -0.527988f, -0.830433f, 0.506861f,
    -0.477080f, -0.845884f, 0.455953f,
    -0.384016f, -0.858211f, 0.362889f,
    -0.236223f, -0.866370f, 0.215095f,
    -0.664759f, -0.812898f, 0.378023f,
    -0.638773f, -0.830433f, 0.362761f,
    -0.576738f, -0.845884f, 0.326326f,
    -0.463333f, -0.858211f, 0.259720f,
    -0.283236f, -0.866370f, 0.153944f,
    -0.738876f, -0.812898f, 0.199757f,
    -0.709898f, -0.830433f, 0.191692f,
    -0.640719f, -0.845884f, 0.172439f,
    -0.514255f, -0.858211f, 0.137243f,
    -0.313419f, -0.866370f, 0.081348f,
    -0.765051f, -0.812898f, 0.000000f,
    -0.735016f, -0.830433f, 0.000000f,
    -0.663315f, -0.845884f, 0.000000f,
    -0.532238f, -0.858211f, 0.000000f,
    -0.324079f, -0.866370f, 0.000000f,
    -0.738876f, -0.812898f, -0.199757f,
    -0.709898f, -0.830433f, -0.191692f,
    -0.640719f, -0.845884f, -0.172439f,
    -0.514255f, -0.858211f, -0.137243f,
    -0.313419f, -0.866370f, -0.081348f,
    -0.664759f, -0.812898f, -0.378023f,
    -0.638773f, -0.830433f, -0.362761f,
    -0.576738f, -0.845884f, -0.326326f,
    -0.463333f, -0.858211f, -0.259720f,
    -0.283236f, -0.866370f, -0.153944f,
    -0.549313f, -0.812898f, -0.528186f,
    -0.527988f, -0.830433f, -0.506861f,
    -0.477080f, -0.845884f, -0.455953f,
    -0.384016f, -0.858211f, -0.362889f,
    -0.236223f, -0.866370f, -0.215095f,
    -0.399151f, -0.812898f, -0.643632f,
    -0.383889f, -0.830433f, -0.617646f,
    -0.347454f, -0.845884f, -0.555611f,
    -0.280847f, -0.858211f, -0.442206f,
    -0.175071f, -0.866370f, -0.262109f,
    -0.220884f, -0.812898f, -0.717749f,
    -0.212820f, -0.830433f, -0.688771f,
    -0.193566f, -0.845884f, -0.619592f,
    -0.158370f, -0.858211f, -0.493128f,
    -0.102475f, -0.866370f, -0.292292f,
    -0.021127f, -0.812898f, -0.743924f,
    -0.021127f, -0.830433f, -0.713889f,
    -0.021127f, -0.845884f, -0.642188f,
    -0.021127f, -0.858211f, -0.511111f,
    -0.021127f, -0.866370f, -0.302951f,
    0.178630f, -0.812898f, -0.717749f,
    0.170565f, -0.830433f, -0.688771f,
    0.151312f, -0.845884f, -0.619592f,
    0.116116f, -0.858211f, -0.493128f,
    0.060221f, -0.866370f, -0.292292f,
    0.356896f, -0.812898f, -0.643632f,
    0.341634f, -0.830433f, -0.617646f,
    0.305199f, -0.845884f, -0.555611f,
    0.238593f, -0.858211f, -0.442206f,
    0.132817f, -0.866370f, -0.262109f,
    0.507059f, -0.812898f, -0.528186f,
    0.485734f, -0.830433f, -0.506861f,
    0.434826f, -0.845884f, -0.455953f,
    0.341762f, -0.858211f, -0.362889f,
    0.193968f, -0.866370f, -0.215095f,
    0.622505f, -0.812898f, -0.378023f,
    0.596519f, -0.830433f, -0.362761f,
    0.534484f, -0.845884f, -0.326326f,
    0.421079f, -0.858211f, -0.259720f,
    0.240982f, -0.866370f, -0.153944f,
    0.696621f, -0.812898f, -0.199757f,
    0.667643f, -0.830433f, -0.191692f,
    0.598465f, -0.845884f, -0.172439f,
    0.472000f, -0.858211f, -0.137243f,
    0.271165f, -0.866370f, -0.081348f,
    -0.821127f, 0.143178f, 0.000000f,
    -0.983396f, 0.142657f, 0.000000f,
    -1.119275f, 0.139012f, 0.000000f,
    -1.227377f, 0.129116f, 0.000000f,
    -1.306313f, 0.109845f, 0.000000f,
    -1.354692f, 0.078074f, 0.000000f,
    -1.371127f, 0.030678f, 0.000000f,
    -0.817424f, 0.151512f, 0.062500f,
    -0.984648f, 0.150952f, 0.062500f,
    -1.124351f, 0.147036f, 0.062500f,
    -1.235248f, 0.136407f, 0.062500f,
    -1.316052f, 0.115709f, 0.062500f,
    -1.365477f, 0.081585f, 0.062500f,
    -1.382239f, 0.030678f, 0.062500f,
    -0.808164f, 0.172345f, 0.100000f,
    -0.987777f, 0.171689f, 0.100000f,
    -1.137040f, 0.167098f, 0.100000f,
    -1.254924f, 0.154637f, 0.100000f,
    -1.340400f, 0.130370f, 0.100000f,
    -1.392441f, 0.090362f, 0.100000f,
    -1.410016f, 0.030678f, 0.100000f,
    -0.796127f, 0.199428f, 0.112500f,
    -0.991845f, 0.198647f, 0.112500f,
    -1.153535f, 0.193178f, 0.112500f,
    -1.280502f, 0.178335f, 0.112500f,
    -1.372053f, 0.149428f, 0.112500f,
    -1.427493f, 0.101772f, 0.112500f,
    -1.446127f, 0.030678f, 0.112500f,
    -0.784090f, 0.226511f, 0.100000f,
    -0.995913f, 0.225605f, 0.100000f,
    -1.170030f, 0.219258f, 0.100000f,
    -1.306081f, 0.202032f, 0.100000f,
    -1.403706f, 0.168487f, 0.100000f,
    -1.462545f, 0.113182f, 0.100000f,
    -1.482238f, 0.030678f, 0.100000f,
    -0.774831f, 0.247345f, 0.062500f,
    -0.999042f, 0.246342f, 0.062500f,
    -1.182719f, 0.239320f, 0.062500f,
    -1.325757f, 0.220261f, 0.062500f,
    -1.428054f, 0.183147f, 0.062500f,
    -1.489509f, 0.121959f, 0.062500f,
    -1.510016f, 0.030678f, 0.062500f,
    -0.771127f, 0.255678f, 0.000000f,
    -1.000294f, 0.254636f, 0.000000f,
    -1.187794f, 0.247345f, 0.000000f,
    -1.333627f, 0.227553f, 0.000000f,
    -1.437794f, 0.189011f, 0.000000f,
    -1.500294f, 0.125470f, 0.000000f,
    -1.521127f, 0.030678f, 0.000000f,
    -0.774831f, 0.247345f, -0.062500f,
    -0.999042f, 0.246342f, -0.062500f,
    -1.182719f, 0.239320f, -0.062500f,
    -1.325757f, 0.220261f, -0.062500f,
    -1.428054f, 0.183147f, -0.062500f,
    -1.489509f, 0.121959f, -0.062500f,
    -1.510016f, 0.030678f, -0.062500f,
    -0.784090f, 0.226511f, -0.100000f,
    -0.995913f, 0.225605f, -0.100000f,
    -1.170030f, 0.219258f, -0.100000f,
    -1.306081f, 0.202032f, -0.100000f,
    -1.403706f, 0.168487f, -0.100000f,
    -1.462545f, 0.113182f, -0.100000f,
    -1.482238f, 0.030678f, -0.100000f,
    -0.796127f, 0.199428f, -0.112500f,
    -0.991845f, 0.198647f, -0.112500f,
    -1.153535f, 0.193178f, -0.112500f,
    -1.280502f, 0.178335f, -0.112500f,
    -1.372053f, 0.149428f, -0.112500f,
    -1.427493f, 0.101772f, -0.112500f,
    -1.446127f, 0.030678f, -0.112500f,
    -0.808164f, 0.172345f, -0.100000f,
    -0.987777f, 0.171689f, -0.100000f,
    -1.137040f, 0.167098f, -0.100000f,
    -1.254924f, 0.154637f, -0.100000f,
    -1.340400f, 0.130370f, -0.100000f,
    -1.392441f, 0.090362f, -0.100000f,
    -1.410016f, 0.030678f, -0.100000f,
    -0.817424f, 0.151512f, -0.062500f,
    -0.984648f, 0.150952f, -0.062500f,
    -1.124351f, 0.147036f, -0.062500f,
    -1.235248f, 0.136407f, -0.062500f,
    -1.316052f, 0.115709f, -0.062500f,
    -1.365477f, 0.081585f, -0.062500f,
    -1.382239f, 0.030678f, -0.062500f,
    -1.362563f, -0.033905f, 0.000000f,
    -1.335942f, -0.110988f, 0.000000f,
    -1.289877f, -0.194322f, 0.000000f,
    -1.222979f, -0.277655f, 0.000000f,
    -1.133859f, -0.354739f, 0.000000f,
    -1.021127f, -0.419322f, 0.000000f,
    -1.373219f, -0.037332f, 0.062500f,
    -1.345270f, -0.116647f, 0.062500f,
    -1.297053f, -0.201440f, 0.062500f,
    -1.227232f, -0.285886f, 0.062500f,
    -1.134467f, -0.364159f, 0.062500f,
    -1.017424f, -0.430433f, 0.062500f,
    -1.399861f, -0.045900f, 0.100000f,
    -1.368590f, -0.130793f, 0.100000f,
    -1.314993f, -0.219235f, 0.100000f,
    -1.237862f, -0.306462f, 0.100000f,
    -1.135989f, -0.387709f, 0.100000f,
    -1.008164f, -0.458211f, 0.100000f,
    -1.434495f, -0.057039f, 0.112500f,
    -1.398905f, -0.149183f, 0.112500f,
    -1.338315f, -0.242369f, 0.112500f,
    -1.251683f, -0.333211f, 0.112500f,
    -1.137967f, -0.418324f, 0.112500f,
    -0.996127f, -0.494322f, 0.112500f,
    -1.469130f, -0.068177f, 0.100000f,
    -1.429221f, -0.167573f, 0.100000f,
    -1.361637f, -0.265502f, 0.100000f,
    -1.265503f, -0.359960f, 0.100000f,
    -1.139946f, -0.448939f, 0.100000f,
    -0.984090f, -0.530433f, 0.100000f,
    -1.495772f, -0.076745f, 0.062500f,
    -1.452540f, -0.181719f, 0.062500f,
    -1.379576f, -0.283298f, 0.062500f,
    -1.276134f, -0.380536f, 0.062500f,
    -1.141468f, -0.472489f, 0.062500f,
    -0.974831f, -0.558211f, 0.062500f,
    -1.506428f, -0.080173f, 0.000000f,
    -1.461868f, -0.187377f, 0.000000f,
    -1.386752f, -0.290416f, 0.000000f,
    -1.280387f, -0.388766f, 0.000000f,
    -1.142076f, -0.481909f, 0.000000f,
    -0.971127f, -0.569322f, 0.000000f,
    -1.495772f, -0.076745f, -0.062500f,
    -1.452540f, -0.181719f, -0.062500f,
    -1.379576f, -0.283298f, -0.062500f,
    -1.276134f, -0.380536f, -0.062500f,
    -1.141468f, -0.472489f, -0.062500f,
    -0.974831f, -0.558211f, -0.062500f,
    -1.469130f, -0.068177f, -0.100000f,
    -1.429221f, -0.167573f, -0.100000f,
    -1.361637f, -0.265502f, -0.100000f,
    -1.265503f, -0.359960f, -0.100000f,
    -1.139946f, -0.448939f, -0.100000f,
    -0.984090f, -0.530433f, -0.100000f,
    -1.434495f, -0.057039f, -0.112500f,
    -1.398905f, -0.149183f, -0.112500f,
    -1.338315f, -0.242369f, -0.112500f,
    -1.251683f, -0.333211f, -0.112500f,
    -1.137967f, -0.418324f, -0.112500f,
    -0.996127f, -0.494322f, -0.112500f,
    -1.399861f, -0.045900f, -0.100000f,
    -1.368590f, -0.130793f, -0.100000f,
    -1.314993f, -0.219235f, -0.100000f,
    -1.237862f, -0.306462f, -0.100000f,
    -1.135989f, -0.387709f, -0.100000f,
    -1.008164f, -0.458211f, -0.100000f,
    -1.373219f, -0.037332f, -0.062500f,
    -1.345270f, -0.116647f, -0.062500f,
    -1.297053f, -0.201440f, -0.062500f,
    -1.227232f, -0.285886f, -0.062500f,
    -1.134467f, -0.364159f, -0.062500f,
    -1.017424f, -0.430433f, -0.062500f,
    0.828873f, -0.156822f, 0.000000f,
    1.008271f, -0.131127f, 0.000000f,
    1.114058f, -0.063766f, 0.000000f,
    1.172623f, 0.030678f, 0.000000f,
    1.210354f, 0.137623f, 0.000000f,
    1.253641f, 0.242484f, 0.000000f,
    1.328873f, 0.330678f, 0.000000f,
    0.828873f, -0.187377f, 0.137500f,
    1.015061f, -0.156719f, 0.131173f,
    1.123935f, -0.083314f, 0.115355f,
    1.183734f, 0.017484f, 0.094792f,
    1.222700f, 0.130318f, 0.074228f,
    1.269073f, 0.239835f, 0.058411f,
    1.351095f, 0.330678f, 0.052083f,
    0.828873f, -0.263766f, 0.220000f,
    1.032036f, -0.220698f, 0.209877f,
    1.148626f, -0.132182f, 0.184568f,
    1.211512f, -0.015502f, 0.151667f,
    1.253564f, 0.112057f, 0.118765f,
    1.307654f, 0.233212f, 0.093457f,
    1.406651f, 0.330678f, 0.083333f,
    0.828873f, -0.363072f, 0.247500f,
    1.054104f, -0.303870f, 0.236111f,
    1.180725f, -0.195711f, 0.207639f,
    1.247623f, -0.058384f, 0.170625f,
    1.293688f, 0.088317f, 0.133611f,
    1.357808f, 0.224602f, 0.105139f,
    1.478873f, 0.330678f, 0.093750f,
    0.828873f, -0.462377f, 0.220000f,
    1.076172f, -0.387043f, 0.209877f,
    1.212823f, -0.259240f, 0.184568f,
    1.283734f, -0.101266f, 0.151667f,
    1.333811f, 0.064577f, 0.118765f,
    1.407962f, 0.215992f, 0.093457f,
    1.551095f, 0.330678f, 0.083333f,
    0.828873f, -0.538766f, 0.137500f,
    1.093148f, -0.451022f, 0.131173f,
    1.237515f, -0.308108f, 0.115355f,
    1.311512f, -0.134252f, 0.094792f,
    1.364675f, 0.046316f, 0.074228f,
    1.446543f, 0.209369f, 0.058410f,
    1.606651f, 0.330678f, 0.052083f,
    0.828873f, -0.569322f, 0.000000f,
    1.099938f, -0.476614f, 0.000000f,
    1.247391f, -0.327655f, 0.000000f,
    1.322623f, -0.147447f, 0.000000f,
    1.377021f, 0.039012f, 0.000000f,
    1.461975f, 0.206720f, 0.000000f,
    1.628873f, 0.330678f, 0.000000f,
    0.828873f, -0.538766f, -0.137500f,
    1.093148f, -0.451022f, -0.131173f,
    1.237515f, -0.308108f, -0.115355f,
    1.311512f, -0.134252f, -0.094792f,
    1.364675f, 0.046316f, -0.074228f,
    1.446543f, 0.209369f, -0.058410f,
    1.606651f, 0.330678f, -0.052083f,
    0.828873f, -0.462377f, -0.220000f,
    1.076172f, -0.387043f, -0.209877f,
    1.212823f, -0.259240f, -0.184568f,
    1.283734f, -0.101266f, -0.151667f,
    1.333811f, 0.064577f, -0.118765f,
    1.407962f, 0.215992f, -0.093457f,
    1.551095f, 0.330678f, -0.083333f,
    0.828873f, -0.363072f, -0.247500f,
    1.054104f, -0.303870f, -0.236111f,
    1.180725f, -0.195711f, -0.207639f,
    1.247623f, -0.058384f, -0.170625f,
    1.293688f, 0.088317f, -0.133611f,
    1.357808f, 0.224602f, -0.105139f,
    1.478873f, 0.330678f, -0.093750f,
    0.828873f, -0.263766f, -0.220000f,
    1.032036f, -0.220698f, -0.209877f,
    1.148626f, -0.132182f, -0.184568f,
    1.211512f, -0.015502f, -0.151667f,
    1.253564f, 0.112057f, -0.118765f,
    1.307654f, 0.233212f, -0.093457f,
    1.406651f, 0.330678f, -0.083333f,
    0.828873f, -0.187377f, -0.137500f,
    1.015061f, -0.156719f, -0.131173f,
    1.123935f, -0.083314f, -0.115355f,
    1.183734f, 0.017484f, -0.094792f,
    1.222700f, 0.130318f, -0.074228f,
    1.269073f, 0.239835f, -0.058410f,
    1.351095f, 0.330678f, -0.052083f,
    1.353410f, 0.346303f, 0.000000f,
    1.375169f, 0.355678f, 0.000000f,
    1.391373f, 0.358803f, 0.000000f,
    1.399243f, 0.355678f, 0.000000f,
    1.396003f, 0.346303f, 0.000000f,
    1.378873f, 0.330678f, 0.000000f,
    1.377077f, 0.346641f, 0.050540f,
    1.398763f, 0.356295f, 0.046682f,
    1.413711f, 0.359584f, 0.041667f,
    1.419477f, 0.356450f, 0.036651f,
    1.413617f, 0.346834f, 0.032793f,
    1.393688f, 0.330678f, 0.031250f,
    1.436244f, 0.347485f, 0.080864f,
    1.457748f, 0.357839f, 0.074691f,
    1.469556f, 0.361538f, 0.066667f,
    1.470060f, 0.358379f, 0.058642f,
    1.457652f, 0.348160f, 0.052469f,
    1.430725f, 0.330678f, 0.050000f,
    1.513161f, 0.348582f, 0.090972f,
    1.534428f, 0.359845f, 0.084028f,
    1.542154f, 0.364077f, 0.075000f,
    1.535817f, 0.360886f, 0.065972f,
    1.514897f, 0.349884f, 0.059028f,
    1.478873f, 0.330678f, 0.056250f,
    1.590078f, 0.349679f, 0.080864f,
    1.611109f, 0.361851f, 0.074691f,
    1.614753f, 0.366616f, 0.066667f,
    1.601575f, 0.363394f, 0.058642f,
    1.572143f, 0.351608f, 0.052469f,
    1.527021f, 0.330678f, 0.050000f,
    1.649245f, 0.350523f, 0.050540f,
    1.670094f, 0.363394f, 0.046682f,
    1.670597f, 0.368569f, 0.041667f,
    1.652158f, 0.365323f, 0.036651f,
    1.616178f, 0.352934f, 0.032793f,
    1.564058f, 0.330678f, 0.031250f,
    1.672912f, 0.350860f, 0.000000f,
    1.693688f, 0.364011f, 0.000000f,
    1.692935f, 0.369350f, 0.000000f,
    1.672391f, 0.366095f, 0.000000f,
    1.633792f, 0.353465f, 0.000000f,
    1.578873f, 0.330678f, 0.000000f,
    1.649245f, 0.350523f, -0.050540f,
    1.670094f, 0.363394f, -0.046682f,
    1.670597f, 0.368569f, -0.041667f,
    1.652158f, 0.365323f, -0.036651f,
    1.616178f, 0.352934f, -0.032793f,
    1.564058f, 0.330678f, -0.031250f,
    1.590078f, 0.349679f, -0.080864f,
    1.611109f, 0.361851f, -0.074691f,
    1.614753f, 0.366616f, -0.066667f,
    1.601575f, 0.363394f, -0.058642f,
    1.572143f, 0.351608f, -0.052469f,
    1.527021f, 0.330678f, -0.050000f,
    1.513161f, 0.348582f, -0.090972f,
    1.534428f, 0.359845f, -0.084028f,
    1.542154f, 0.364077f, -0.075000f,
    1.535817f, 0.360886f, -0.065972f,
    1.514897f, 0.349884f, -0.059028f,
    1.478873f, 0.330678f, -0.056250f,
    1.436244f, 0.347485f, -0.080864f,
    1.457748f, 0.357839f, -0.074691f,
    1.469556f, 0.361538f, -0.066667f,
    1.470060f, 0.358379f, -0.058642f,
    1.457652f, 0.348160f, -0.052469f,
    1.430725f, 0.330678f, -0.050000f,
    1.377077f, 0.346641f, -0.050540f,
    1.398763f, 0.356295f, -0.046682f,
    1.413711f, 0.359584f, -0.041667f,
    1.419477f, 0.356450f, -0.036651f,
    1.413617f, 0.346834f, -0.032793f,
    1.393688f, 0.330678f, -0.031250f,
    -0.021127f, 0.705678f, 0.000000f,
    0.118225f, 0.694220f, 0.000000f,
    0.160354f, 0.664011f, 0.000000f,
    0.141373f, 0.621303f, 0.000000f,
    0.097391f, 0.572345f, 0.000000f,
    0.064521f, 0.523386f, 0.000000f,
    0.078873f, 0.480678f, 0.000000f,
    0.113346f, 0.694220f, 0.037539f,
    0.154000f, 0.664011f, 0.048885f,
    0.135681f, 0.621303f, 0.043764f,
    0.093237f, 0.572345f, 0.031902f,
    0.061512f, 0.523386f, 0.023022f,
    0.075354f, 0.480678f, 0.026852f,
    0.099515f, 0.694220f, 0.070966f,
    0.135987f, 0.664011f, 0.092417f,
    0.119549f, 0.621303f, 0.082741f,
    0.081463f, 0.572345f, 0.060324f,
    0.052990f, 0.523386f, 0.043553f,
    0.065391f, 0.480678f, 0.050815f,
    0.077943f, 0.694220f, 0.099070f,
    0.107891f, 0.664011f, 0.129019f,
    0.094388f, 0.621303f, 0.115516f,
    0.063104f, 0.572345f, 0.084231f,
    0.039709f, 0.523386f, 0.060836f,
    0.049873f, 0.480678f, 0.071000f,
    0.049838f, 0.694220f, 0.120642f,
    0.071290f, 0.664011f, 0.157114f,
    0.061614f, 0.621303f, 0.140676f,
    0.039197f, 0.572345f, 0.102590f,
    0.022426f, 0.523386f, 0.074117f,
    0.029688f, 0.480678f, 0.086519f,
    0.016412f, 0.694220f, 0.134473f,
    0.027758f, 0.664011f, 0.175127f,
    0.022637f, 0.621303f, 0.156808f,
    0.010774f, 0.572345f, 0.114364f,
    0.001895f, 0.523386f, 0.082639f,
    0.005725f, 0.480678f, 0.096482f,
    -0.021127f, 0.694220f, 0.139352f,
    -0.021127f, 0.664011f, 0.181482f,
    -0.021127f, 0.621303f, 0.162500f,
    -0.021127f, 0.572345f, 0.118519f,
    -0.021127f, 0.523386f, 0.085648f,
    -0.021127f, 0.480678f, 0.100000f,
    -0.058666f, 0.694220f, 0.134473f,
    -0.070013f, 0.664011f, 0.175127f,
    -0.064892f, 0.621303f, 0.156808f,
    -0.053029f, 0.572345f, 0.114364f,
    -0.044149f, 0.523386f, 0.082639f,
    -0.047979f, 0.480678f, 0.096481f,
    -0.092093f, 0.694220f, 0.120642f,
    -0.113544f, 0.664011f, 0.157114f,
    -0.103868f, 0.621303f, 0.140676f,
    -0.081451f, 0.572345f, 0.102590f,
    -0.064680f, 0.523386f, 0.074117f,
    -0.071942f, 0.480678f, 0.086519f,
    -0.120197f, 0.694220f, 0.099070f,
    -0.150146f, 0.664011f, 0.129019f,
    -0.136643f, 0.621303f, 0.115516f,
    -0.105359f, 0.572345f, 0.084231f,
    -0.081963f, 0.523386f, 0.060836f,
    -0.092127f, 0.480678f, 0.071000f,
    -0.141770f, 0.694220f, 0.070966f,
    -0.178241f, 0.664011f, 0.092417f,
    -0.161803f, 0.621303f, 0.082741f,
    -0.123717f, 0.572345f, 0.060324f,
    -0.095244f, 0.523386f, 0.043553f,
    -0.107646f, 0.480678f, 0.050815f,
    -0.155600f, 0.694220f, 0.037539f,
    -0.196254f, 0.664011f, 0.048885f,
    -0.177936f, 0.621303f, 0.043764f,
    -0.135491f, 0.572345f, 0.031902f,
    -0.103767f, 0.523386f, 0.023022f,
    -0.117609f, 0.480678f, 0.026852f,
    -0.160479f, 0.694220f, 0.000000f,
    -0.202609f, 0.664011f, 0.000000f,
    -0.183627f, 0.621303f, 0.000000f,
    -0.139646f, 0.572345f, 0.000000f,
    -0.106775f, 0.523386f, 0.000000f,
    -0.121127f, 0.480678f, 0.000000f,
    -0.155600f, 0.694220f, -0.037539f,
    -0.196254f, 0.664011f, -0.048885f,
    -0.177936f, 0.621303f, -0.043764f,
    -0.135491f, 0.572345f, -0.031902f,
    -0.103767f, 0.523386f, -0.023022f,
    -0.117609f, 0.480678f, -0.026852f,
    -0.141770f, 0.694220f, -0.070966f,
    -0.178241f, 0.664011f, -0.092417f,
    -0.161803f, 0.621303f, -0.082741f,
    -0.123717f, 0.572345f, -0.060324f,
    -0.095244f, 0.523386f, -0.043553f,
    -0.107646f, 0.480678f, -0.050815f,
    -0.120197f, 0.694220f, -0.099070f,
    -0.150146f, 0.664011f, -0.129019f,
    -0.136643f, 0.621303f, -0.115516f,
    -0.105359f, 0.572345f, -0.084231f,
    -0.081963f, 0.523386f, -0.060836f,
    -0.092127f, 0.480678f, -0.071000f,
    -0.092093f, 0.694220f, -0.120642f,
    -0.113544f, 0.664011f, -0.157114f,
    -0.103868f, 0.621303f, -0.140676f,
    -0.081451f, 0.572345f, -0.102590f,
    -0.064680f, 0.523386f, -0.074117f,
    -0.071942f, 0.480678f, -0.086519f,
    -0.058666f, 0.694220f, -0.134473f,
    -0.070013f, 0.664011f, -0.175127f,
    -0.064892f, 0.621303f, -0.156808f,
    -0.053029f, 0.572345f, -0.114364f,
    -0.044149f, 0.523386f, -0.082639f,
    -0.047979f, 0.480678f, -0.096482f,
    -0.021127f, 0.694220f, -0.139352f,
    -0.021127f, 0.664011f, -0.181482f,
    -0.021127f, 0.621303f, -0.162500f,
    -0.021127f, 0.572345f, -0.118519f,
    -0.021127f, 0.523386f, -0.085648f,
    -0.021127f, 0.480678f, -0.100000f,
    0.016412f, 0.694220f, -0.134473f,
    0.027758f, 0.664011f, -0.175127f,
    0.022637f, 0.621303f, -0.156808f,
    0.010774f, 0.572345f, -0.114364f,
    0.001895f, 0.523386f, -0.082639f,
    0.005725f, 0.480678f, -0.096481f,
    0.049838f, 0.694220f, -0.120642f,
    0.071290f, 0.664011f, -0.157114f,
    0.061614f, 0.621303f, -0.140676f,
    0.039197f, 0.572345f, -0.102590f,
    0.022426f, 0.523386f, -0.074117f,
    0.029688f, 0.480678f, -0.086519f,
    0.077943f, 0.694220f, -0.099070f,
    0.107891f, 0.664011f, -0.129019f,
    0.094388f, 0.621303f, -0.115516f,
    0.063104f, 0.572345f, -0.084231f,
    0.039709f, 0.523386f, -0.060836f,
    0.049873f, 0.480678f, -0.071000f,
    0.099515f, 0.694220f, -0.070966f,
    0.135987f, 0.664011f, -0.092417f,
    0.119549f, 0.621303f, -0.082741f,
    0.081463f, 0.572345f, -0.060324f,
    0.052990f, 0.523386f, -0.043553f,
    0.065391f, 0.480678f, -0.050815f,
    0.113346f, 0.694220f, -0.037539f,
    0.154000f, 0.664011f, -0.048885f,
    0.135681f, 0.621303f, -0.043764f,
    0.093237f, 0.572345f, -0.031902f,
    0.061512f, 0.523386f, -0.023022f,
    0.075354f, 0.480678f, -0.026852f,
    0.154336f, 0.448734f, 0.000000f,
    0.265910f, 0.425123f, 0.000000f,
    0.391373f, 0.405678f, 0.000000f,
    0.508502f, 0.386234f, 0.000000f,
    0.595077f, 0.362623f, 0.000000f,
    0.628873f, 0.330678f, 0.000000f,
    0.148162f, 0.448734f, 0.047115f,
    0.255810f, 0.425123f, 0.077075f,
    0.376859f, 0.405678f, 0.110764f,
    0.489867f, 0.386234f, 0.142215f,
    0.573395f, 0.362623f, 0.165462f,
    0.606002f, 0.330678f, 0.174537f,
    0.130681f, 0.448734f, 0.089161f,
    0.227213f, 0.425123f, 0.145857f,
    0.335762f, 0.405678f, 0.209611f,
    0.437101f, 0.386234f, 0.269130f,
    0.512003f, 0.362623f, 0.313123f,
    0.541243f, 0.330678f, 0.330296f,
    0.103451f, 0.448734f, 0.124579f,
    0.182669f, 0.425123f, 0.203796f,
    0.271748f, 0.405678f, 0.292875f,
    0.354910f, 0.386234f, 0.376037f,
    0.416377f, 0.362623f, 0.437505f,
    0.440373f, 0.330678f, 0.461500f,
    0.068034f, 0.448734f, 0.151808f,
    0.124730f, 0.425123f, 0.248340f,
    0.188484f, 0.405678f, 0.356889f,
    0.248003f, 0.386234f, 0.458228f,
    0.291995f, 0.362623f, 0.533130f,
    0.309169f, 0.330678f, 0.562370f,
    0.025988f, 0.448734f, 0.169289f,
    0.055948f, 0.425123f, 0.276938f,
    0.089637f, 0.405678f, 0.397986f,
    0.121088f, 0.386234f, 0.510995f,
    0.144335f, 0.362623f, 0.594523f,
    0.153410f, 0.330678f, 0.627130f,
    -0.021127f, 0.448734f, 0.175463f,
    -0.021127f, 0.425123f, 0.287037f,
    -0.021127f, 0.405678f, 0.412500f,
    -0.021127f, 0.386234f, 0.529630f,
    -0.021127f, 0.362623f, 0.616204f,
    -0.021127f, 0.330678f, 0.650000f,
    -0.068242f, 0.448734f, 0.169289f,
    -0.098202f, 0.425123f, 0.276938f,
    -0.131891f, 0.405678f, 0.397986f,
    -0.163343f, 0.386234f, 0.510995f,
    -0.186589f, 0.362623f, 0.594523f,
    -0.195664f, 0.330678f, 0.627130f,
    -0.110288f, 0.448734f, 0.151808f,
    -0.166985f, 0.425123f, 0.248340f,
    -0.230738f, 0.405678f, 0.356889f,
    -0.290258f, 0.386234f, 0.458228f,
    -0.334250f, 0.362623f, 0.533130f,
    -0.351424f, 0.330678f, 0.562370f,
    -0.145706f, 0.448734f, 0.124579f,
    -0.224924f, 0.425123f, 0.203796f,
    -0.314002f, 0.405678f, 0.292875f,
    -0.397164f, 0.386234f, 0.376037f,
    -0.458632f, 0.362623f, 0.437505f,
    -0.482627f, 0.330678f, 0.461500f,
    -0.172935f, 0.448734f, 0.089161f,
    -0.269467f, 0.425123f, 0.145857f,
    -0.378016f, 0.405678f, 0.209611f,
    -0.479355f, 0.386234f, 0.269130f,
    -0.554258f, 0.362623f, 0.313123f,
    -0.583498f, 0.330678f, 0.330296f,
    -0.190416f, 0.448734f, 0.047115f,
    -0.298065f, 0.425123f, 0.077075f,
    -0.419113f, 0.405678f, 0.110764f,
    -0.532122f, 0.386234f, 0.142215f,
    -0.615650f, 0.362623f, 0.165462f,
    -0.648257f, 0.330678f, 0.174537f,
    -0.196590f, 0.448734f, 0.000000f,
    -0.308164f, 0.425123f, 0.000000f,
    -0.433627f, 0.405678f, 0.000000f,
    -0.550757f, 0.386234f, 0.000000f,
    -0.637331f, 0.362623f, 0.000000f,
    -0.671127f, 0.330678f, 0.000000f,
    -0.190416f, 0.448734f, -0.047115f,
    -0.298065f, 0.425123f, -0.077075f,
    -0.419113f, 0.405678f, -0.110764f,
    -0.532122f, 0.386234f, -0.142215f,
    -0.615650f, 0.362623f, -0.165462f,
    -0.648257f, 0.330678f, -0.174537f,
    -0.172935f, 0.448734f, -0.089161f,
    -0.269467f, 0.425123f, -0.145857f,
    -0.378016f, 0.405678f, -0.209611f,
    -0.479355f, 0.386234f, -0.269130f,
    -0.554258f, 0.362623f, -0.313123f,
    -0.583498f, 0.330678f, -0.330296f,
    -0.145706f, 0.448734f, -0.124579f,
    -0.224924f, 0.425123f, -0.203796f,
    -0.314002f, 0.405678f, -0.292875f,
    -0.397164f, 0.386234f, -0.376037f,
    -0.458632f, 0.362623f, -0.437505f,
    -0.482627f, 0.330678f, -0.461500f,
    -0.110288f, 0.448734f, -0.151808f,
    -0.166985f, 0.425123f, -0.248340f,
    -0.230738f, 0.405678f, -0.356889f,
    -0.290258f, 0.386234f, -0.458228f,
    -0.334250f, 0.362623f, -0.533130f,
    -0.351424f, 0.330678f, -0.562370f,
    -0.068242f, 0.448734f, -0.169289f,
    -0.098202f, 0.425123f, -0.276938f,
    -0.131891f, 0.405678f, -0.397986f,
    -0.163343f, 0.386234f, -0.510995f,
    -0.186589f, 0.362623f, -0.594523f,
    -0.195664f, 0.330678f, -0.627130f,
    -0.021127f, 0.448734f, -0.175463f,
    -0.021127f, 0.425123f, -0.287037f,
    -0.021127f, 0.405678f, -0.412500f,
    -0.021127f, 0.386234f, -0.529630f,
    -0.021127f, 0.362623f, -0.616204f,
    -0.021127f, 0.330678f, -0.650000f,
    0.025988f, 0.448734f, -0.169289f,
    0.055948f, 0.425123f, -0.276938f,
    0.089637f, 0.405678f, -0.397986f,
    0.121088f, 0.386234f, -0.510995f,
    0.144335f, 0.362623f, -0.594523f,
    0.153410f, 0.330678f, -0.627130f,
    0.068034f, 0.448734f, -0.151808f,
    0.124730f, 0.425123f, -0.248340f,
    0.188484f, 0.405678f, -0.356889f,
    0.248003f, 0.386234f, -0.458228f,
    0.291996f, 0.362623f, -0.533130f,
    0.309169f, 0.330678f, -0.562370f,
    0.103451f, 0.448734f, -0.124579f,
    0.182669f, 0.425123f, -0.203796f,
    0.271748f, 0.405678f, -0.292875f,
    0.354910f, 0.386234f, -0.376037f,
    0.416377f, 0.362623f, -0.437505f,
    0.440373f, 0.330678f, -0.461500f,
    0.130681f, 0.448734f, -0.089161f,
    0.227213f, 0.425123f, -0.145857f,
    0.335762f, 0.405678f, -0.209611f,
    0.437101f, 0.386234f, -0.269130f,
    0.512003f, 0.362623f, -0.313123f,
    0.541243f, 0.330678f, -0.330296f,
    0.148162f, 0.448734f, -0.047115f,
    0.255810f, 0.425123f, -0.077075f,
    0.376859f, 0.405678f, -0.110764f,
    0.489867f, 0.386234f, -0.142215f,
    0.573395f, 0.362623f, -0.165462f,
    0.606002f, 0.330678f, -0.174537f,
};
static D3DXVECTOR3* teapotPositions = ( D3DXVECTOR3* )teapotPositionsFloats;

static float teapotNormalsfloats[NUMTEAPOTVERTICES*3] =
{
    -0.945751f, -0.322256f, -0.041309f,
    -0.992771f, -0.120019f, -0.001089f,
    -0.842751f, 0.538169f, 0.012052f,
    -0.083588f, 0.996288f, 0.020560f,
    0.532170f, 0.846603f, 0.007614f,
    0.779300f, 0.626641f, 0.003491f,
    0.879896f, 0.475165f, 0.001103f,
    -0.902413f, -0.322783f, -0.285416f,
    -0.958558f, -0.120097f, -0.258348f,
    -0.816875f, 0.538579f, -0.206514f,
    -0.086190f, 0.996277f, -0.001604f,
    0.511484f, 0.846942f, 0.145167f,
    0.751363f, 0.627164f, 0.205227f,
    0.849281f, 0.475682f, 0.229015f,
    -0.797449f, -0.323303f, -0.509461f,
    -0.858625f, -0.120328f, -0.498282f,
    -0.735017f, 0.538957f, -0.411431f,
    -0.082580f, 0.996294f, -0.024043f,
    0.455735f, 0.847352f, 0.272581f,
    0.671856f, 0.627868f, 0.392927f,
    0.760399f, 0.476384f, 0.441420f,
    -0.639341f, -0.323439f, -0.697589f,
    -0.701183f, -0.120461f, -0.702731f,
    -0.604040f, 0.539064f, -0.586980f,
    -0.073399f, 0.996309f, -0.044511f,
    0.369925f, 0.847499f, 0.380659f,
    0.547722f, 0.628143f, 0.552663f,
    0.620826f, 0.476660f, 0.622391f,
    -0.437782f, -0.323142f, -0.839003f,
    -0.496373f, -0.120437f, -0.859715f,
    -0.432443f, 0.538876f, -0.722914f,
    -0.059523f, 0.996312f, -0.061801f,
    0.259388f, 0.847326f, 0.463418f,
    0.386844f, 0.627880f, 0.675366f,
    0.439492f, 0.476398f, 0.761506f,
    -0.204681f, -0.322547f, -0.924159f,
    -0.256209f, -0.120257f, -0.959112f,
    -0.230122f, 0.538458f, -0.810621f,
    -0.041668f, 0.996304f, -0.075119f,
    0.130300f, 0.846904f, 0.515534f,
    0.198391f, 0.627182f, 0.753183f,
    0.226852f, 0.475703f, 0.849850f,
    0.035941f, -0.330214f, -0.943221f,
    -0.001376f, -0.125569f, -0.992084f,
    -0.012701f, 0.535792f, -0.844254f,
    -0.020672f, 0.996343f, -0.082901f,
    -0.007571f, 0.846427f, 0.532451f,
    -0.003482f, 0.626608f, 0.779327f,
    -0.001103f, 0.475165f, 0.879896f,
    0.269574f, -0.386954f, -0.881814f,
    0.249993f, -0.181783f, -0.951030f,
    0.211872f, 0.499984f, -0.839718f,
    0.002768f, 0.995768f, -0.091859f,
    -0.146446f, 0.844150f, 0.515718f,
    -0.205497f, 0.625909f, 0.752335f,
    -0.229034f, 0.475536f, 0.849358f,
    0.482854f, -0.445924f, -0.753661f,
    0.483883f, -0.261599f, -0.835118f,
    0.442338f, 0.434016f, -0.784836f,
    0.036680f, 0.993502f, -0.107746f,
    -0.278510f, 0.839949f, 0.465746f,
    -0.394390f, 0.624142f, 0.674465f,
    -0.441541f, 0.475913f, 0.760624f,
    0.669165f, -0.453044f, -0.589041f,
    0.686401f, -0.287530f, -0.667967f,
    0.643212f, 0.404496f, -0.650124f,
    0.074604f, 0.991460f, -0.106959f,
    -0.391289f, 0.837987f, 0.380356f,
    -0.555484f, 0.623132f, 0.550586f,
    -0.622636f, 0.476008f, 0.621080f,
    0.821788f, -0.407716f, -0.398036f,
    0.849894f, -0.244430f, -0.466834f,
    0.778095f, 0.435804f, -0.452374f,
    0.095458f, 0.992115f, -0.081218f,
    -0.473659f, 0.839871f, 0.265074f,
    -0.678265f, 0.623724f, 0.388490f,
    -0.761768f, 0.475842f, 0.439641f,
    0.919150f, -0.348512f, -0.183583f,
    0.956218f, -0.171139f, -0.237398f,
    0.838823f, 0.493898f, -0.229000f,
    0.094322f, 0.994404f, -0.047578f,
    -0.520640f, 0.843596f, 0.131452f,
    -0.754753f, 0.625180f, 0.198741f,
    -0.849997f, 0.475426f, 0.226882f,
    0.945537f, -0.322183f, 0.046446f,
    0.991881f, -0.126966f, 0.007216f,
    0.847572f, 0.530605f, -0.008996f,
    0.087879f, 0.995918f, -0.020615f,
    -0.533063f, 0.846041f, -0.007711f,
    -0.779612f, 0.626253f, -0.003532f,
    -0.879926f, 0.475109f, -0.001109f,
    0.902413f, -0.322783f, 0.285416f,
    0.958558f, -0.120097f, 0.258348f,
    0.816875f, 0.538579f, 0.206514f,
    0.086190f, 0.996277f, 0.001604f,
    -0.511484f, 0.846942f, -0.145167f,
    -0.751363f, 0.627164f, -0.205227f,
    -0.849281f, 0.475682f, -0.229015f,
    0.797449f, -0.323303f, 0.509461f,
    0.858625f, -0.120328f, 0.498282f,
    0.735017f, 0.538957f, 0.411431f,
    0.082580f, 0.996294f, 0.024043f,
    -0.455735f, 0.847352f, -0.272581f,
    -0.671856f, 0.627868f, -0.392927f,
    -0.760399f, 0.476384f, -0.441420f,
    0.639341f, -0.323439f, 0.697589f,
    0.701183f, -0.120461f, 0.702731f,
    0.604040f, 0.539064f, 0.586980f,
    0.073399f, 0.996309f, 0.044511f,
    -0.369925f, 0.847499f, -0.380659f,
    -0.547722f, 0.628143f, -0.552663f,
    -0.620826f, 0.476660f, -0.622391f,
    0.437782f, -0.323142f, 0.839003f,
    0.496373f, -0.120437f, 0.859715f,
    0.432443f, 0.538876f, 0.722914f,
    0.059523f, 0.996312f, 0.061801f,
    -0.259388f, 0.847326f, -0.463418f,
    -0.386844f, 0.627880f, -0.675366f,
    -0.439492f, 0.476398f, -0.761506f,
    0.204681f, -0.322547f, 0.924159f,
    0.256209f, -0.120257f, 0.959112f,
    0.230122f, 0.538458f, 0.810621f,
    0.041668f, 0.996304f, 0.075119f,
    -0.130300f, 0.846904f, -0.515534f,
    -0.198391f, 0.627182f, -0.753183f,
    -0.226852f, 0.475703f, -0.849850f,
    -0.041309f, -0.322256f, 0.945751f,
    -0.001089f, -0.120019f, 0.992771f,
    0.012052f, 0.538169f, 0.842751f,
    0.020560f, 0.996288f, 0.083588f,
    0.007614f, 0.846603f, -0.532170f,
    0.003491f, 0.626641f, -0.779300f,
    0.001103f, 0.475165f, -0.879896f,
    -0.285416f, -0.322783f, 0.902413f,
    -0.258348f, -0.120097f, 0.958558f,
    -0.206514f, 0.538579f, 0.816875f,
    -0.001604f, 0.996277f, 0.086190f,
    0.145167f, 0.846942f, -0.511484f,
    0.205227f, 0.627164f, -0.751363f,
    0.229015f, 0.475682f, -0.849281f,
    -0.509461f, -0.323303f, 0.797449f,
    -0.498282f, -0.120328f, 0.858625f,
    -0.411431f, 0.538957f, 0.735017f,
    -0.024043f, 0.996294f, 0.082580f,
    0.272581f, 0.847352f, -0.455735f,
    0.392927f, 0.627868f, -0.671856f,
    0.441420f, 0.476384f, -0.760399f,
    -0.697589f, -0.323439f, 0.639341f,
    -0.702731f, -0.120461f, 0.701183f,
    -0.586980f, 0.539064f, 0.604040f,
    -0.044511f, 0.996309f, 0.073399f,
    0.380659f, 0.847499f, -0.369925f,
    0.552663f, 0.628143f, -0.547722f,
    0.622391f, 0.476660f, -0.620826f,
    -0.839003f, -0.323142f, 0.437782f,
    -0.859715f, -0.120437f, 0.496373f,
    -0.722914f, 0.538876f, 0.432443f,
    -0.061801f, 0.996312f, 0.059523f,
    0.463418f, 0.847326f, -0.259388f,
    0.675366f, 0.627880f, -0.386844f,
    0.761506f, 0.476398f, -0.439492f,
    -0.924159f, -0.322547f, 0.204681f,
    -0.959112f, -0.120257f, 0.256209f,
    -0.810621f, 0.538458f, 0.230122f,
    -0.075119f, 0.996304f, 0.041668f,
    0.515534f, 0.846904f, -0.130300f,
    0.753183f, 0.627182f, -0.198391f,
    0.849850f, 0.475703f, -0.226852f,
    0.908180f, 0.418579f, 0.000170f,
    0.920061f, 0.391776f, 0.000335f,
    0.939254f, 0.343222f, 0.000478f,
    0.963807f, 0.266599f, 0.000552f,
    0.988261f, 0.152772f, 0.000449f,
    0.998933f, -0.046187f, -0.000262f,
    0.876892f, 0.419073f, 0.235451f,
    0.888349f, 0.392247f, 0.238702f,
    0.906891f, 0.343648f, 0.243832f,
    0.930644f, 0.266938f, 0.250291f,
    0.954351f, 0.152959f, 0.256551f,
    0.964867f, -0.046304f, 0.258627f,
    0.785456f, 0.419734f, 0.454843f,
    0.795707f, 0.392883f, 0.460971f,
    0.812334f, 0.344228f, 0.470766f,
    0.833667f, 0.267414f, 0.483207f,
    0.855012f, 0.153250f, 0.495448f,
    0.864663f, -0.046372f, 0.500207f,
    0.641599f, 0.419990f, 0.641841f,
    0.649935f, 0.393130f, 0.650410f,
    0.663494f, 0.344457f, 0.664173f,
    0.680925f, 0.267607f, 0.681710f,
    0.698421f, 0.153377f, 0.699059f,
    0.706532f, -0.046369f, 0.706160f,
    0.454545f, 0.419737f, 0.785627f,
    0.460384f, 0.392890f, 0.796043f,
    0.469929f, 0.344241f, 0.812813f,
    0.482239f, 0.267436f, 0.834220f,
    0.494660f, 0.153286f, 0.855462f,
    0.500666f, -0.046300f, 0.864402f,
    0.235117f, 0.419078f, 0.876980f,
    0.238044f, 0.392258f, 0.888521f,
    0.242894f, 0.343667f, 0.907136f,
    0.249206f, 0.266970f, 0.930926f,
    0.255668f, 0.153012f, 0.954579f,
    0.259142f, -0.046198f, 0.964734f,
    -0.000170f, 0.418579f, 0.908181f,
    -0.000335f, 0.391776f, 0.920061f,
    -0.000478f, 0.343222f, 0.939254f,
    -0.000552f, 0.266599f, 0.963807f,
    -0.000449f, 0.152772f, 0.988261f,
    0.000262f, -0.046187f, 0.998933f,
    -0.235451f, 0.419073f, 0.876892f,
    -0.238702f, 0.392247f, 0.888349f,
    -0.243832f, 0.343648f, 0.906891f,
    -0.250291f, 0.266938f, 0.930644f,
    -0.256551f, 0.152959f, 0.954351f,
    -0.258627f, -0.046304f, 0.964867f,
    -0.454843f, 0.419734f, 0.785456f,
    -0.460971f, 0.392883f, 0.795707f,
    -0.470766f, 0.344228f, 0.812334f,
    -0.483207f, 0.267414f, 0.833667f,
    -0.495448f, 0.153250f, 0.855012f,
    -0.500207f, -0.046372f, 0.864663f,
    -0.641841f, 0.419990f, 0.641599f,
    -0.650410f, 0.393130f, 0.649935f,
    -0.664173f, 0.344457f, 0.663494f,
    -0.681710f, 0.267607f, 0.680925f,
    -0.699059f, 0.153377f, 0.698421f,
    -0.706160f, -0.046369f, 0.706532f,
    -0.785627f, 0.419737f, 0.454545f,
    -0.796043f, 0.392890f, 0.460384f,
    -0.812813f, 0.344241f, 0.469929f,
    -0.834220f, 0.267436f, 0.482239f,
    -0.855462f, 0.153286f, 0.494660f,
    -0.864402f, -0.046300f, 0.500666f,
    -0.876980f, 0.419078f, 0.235117f,
    -0.888521f, 0.392258f, 0.238044f,
    -0.907136f, 0.343667f, 0.242894f,
    -0.930926f, 0.266970f, 0.249206f,
    -0.954579f, 0.153012f, 0.255668f,
    -0.964734f, -0.046198f, 0.259142f,
    -0.908181f, 0.418579f, -0.000170f,
    -0.920061f, 0.391776f, -0.000335f,
    -0.939254f, 0.343222f, -0.000478f,
    -0.963807f, 0.266599f, -0.000552f,
    -0.988261f, 0.152772f, -0.000449f,
    -0.998933f, -0.046187f, 0.000262f,
    -0.876892f, 0.419073f, -0.235451f,
    -0.888349f, 0.392247f, -0.238702f,
    -0.906891f, 0.343648f, -0.243832f,
    -0.930644f, 0.266938f, -0.250291f,
    -0.954351f, 0.152959f, -0.256551f,
    -0.964867f, -0.046304f, -0.258627f,
    -0.785456f, 0.419734f, -0.454843f,
    -0.795707f, 0.392883f, -0.460971f,
    -0.812334f, 0.344228f, -0.470766f,
    -0.833667f, 0.267414f, -0.483207f,
    -0.855012f, 0.153250f, -0.495448f,
    -0.864663f, -0.046372f, -0.500207f,
    -0.641599f, 0.419990f, -0.641841f,
    -0.649935f, 0.393130f, -0.650410f,
    -0.663494f, 0.344457f, -0.664173f,
    -0.680925f, 0.267607f, -0.681710f,
    -0.698421f, 0.153377f, -0.699059f,
    -0.706532f, -0.046369f, -0.706160f,
    -0.454545f, 0.419737f, -0.785627f,
    -0.460384f, 0.392890f, -0.796043f,
    -0.469929f, 0.344241f, -0.812813f,
    -0.482239f, 0.267436f, -0.834220f,
    -0.494660f, 0.153286f, -0.855462f,
    -0.500666f, -0.046300f, -0.864402f,
    -0.235117f, 0.419078f, -0.876980f,
    -0.238044f, 0.392258f, -0.888521f,
    -0.242894f, 0.343667f, -0.907136f,
    -0.249206f, 0.266970f, -0.930926f,
    -0.255668f, 0.153012f, -0.954579f,
    -0.259142f, -0.046198f, -0.964734f,
    0.000170f, 0.418579f, -0.908181f,
    0.000335f, 0.391776f, -0.920061f,
    0.000478f, 0.343222f, -0.939254f,
    0.000552f, 0.266599f, -0.963807f,
    0.000449f, 0.152772f, -0.988261f,
    -0.000262f, -0.046187f, -0.998933f,
    0.235451f, 0.419073f, -0.876892f,
    0.238702f, 0.392247f, -0.888349f,
    0.243832f, 0.343648f, -0.906891f,
    0.250291f, 0.266938f, -0.930644f,
    0.256551f, 0.152959f, -0.954351f,
    0.258627f, -0.046304f, -0.964867f,
    0.454843f, 0.419734f, -0.785456f,
    0.460971f, 0.392883f, -0.795707f,
    0.470766f, 0.344228f, -0.812334f,
    0.483207f, 0.267414f, -0.833667f,
    0.495448f, 0.153250f, -0.855012f,
    0.500207f, -0.046372f, -0.864663f,
    0.641841f, 0.419990f, -0.641599f,
    0.650410f, 0.393130f, -0.649935f,
    0.664173f, 0.344457f, -0.663494f,
    0.681710f, 0.267607f, -0.680925f,
    0.699059f, 0.153377f, -0.698421f,
    0.706160f, -0.046369f, -0.706532f,
    0.785627f, 0.419737f, -0.454545f,
    0.796043f, 0.392890f, -0.460384f,
    0.812813f, 0.344241f, -0.469929f,
    0.834220f, 0.267436f, -0.482239f,
    0.855462f, 0.153286f, -0.494660f,
    0.864402f, -0.046300f, -0.500666f,
    0.876980f, 0.419078f, -0.235117f,
    0.888521f, 0.392258f, -0.238044f,
    0.907136f, 0.343667f, -0.242894f,
    0.930926f, 0.266970f, -0.249206f,
    0.954579f, 0.153012f, -0.255668f,
    0.964734f, -0.046198f, -0.259142f,
    0.943833f, -0.330414f, -0.002283f,
    0.821403f, -0.570341f, -0.002745f,
    0.709541f, -0.704661f, -0.001958f,
    0.652305f, -0.757957f, -0.000466f,
    0.728669f, -0.684856f, 0.003576f,
    0.889124f, -0.457656f, 0.003164f,
    0.912037f, -0.330868f, 0.242313f,
    0.793697f, -0.570897f, 0.210051f,
    0.685340f, -0.705168f, 0.181787f,
    0.629635f, -0.758420f, 0.168401f,
    0.702387f, -0.685364f, 0.192168f,
    0.857690f, -0.458122f, 0.233435f,
    0.817716f, -0.331385f, 0.470664f,
    0.711528f, -0.571608f, 0.408646f,
    0.614071f, -0.705839f, 0.353140f,
    0.563713f, -0.759034f, 0.325721f,
    0.627891f, -0.686037f, 0.367569f,
    0.767411f, -0.458787f, 0.447879f,
    0.668728f, -0.331557f, 0.665486f,
    0.582010f, -0.571874f, 0.578122f,
    0.502096f, -0.706097f, 0.499327f,
    0.460496f, -0.759271f, 0.459838f,
    0.511760f, -0.686297f, 0.516816f,
    0.625950f, -0.459060f, 0.630437f,
    0.474660f, -0.331321f, 0.815429f,
    0.413434f, -0.571590f, 0.708771f,
    0.356547f, -0.705839f, 0.612100f,
    0.326530f, -0.759035f, 0.563244f,
    0.361346f, -0.686040f, 0.631489f,
    0.442349f, -0.458832f, 0.770585f,
    0.246794f, -0.330773f, 0.910869f,
    0.215429f, -0.570870f, 0.792274f,
    0.185619f, -0.705168f, 0.684313f,
    0.169311f, -0.758421f, 0.629390f,
    0.185170f, -0.685368f, 0.704260f,
    0.227231f, -0.458188f, 0.859319f,
    0.002283f, -0.330414f, 0.943833f,
    0.002745f, -0.570341f, 0.821403f,
    0.001958f, -0.704661f, 0.709541f,
    0.000466f, -0.757957f, 0.652305f,
    -0.003576f, -0.684856f, 0.728669f,
    -0.003164f, -0.457656f, 0.889124f,
    -0.242313f, -0.330868f, 0.912037f,
    -0.210051f, -0.570897f, 0.793697f,
    -0.181787f, -0.705168f, 0.685340f,
    -0.168401f, -0.758420f, 0.629635f,
    -0.192168f, -0.685364f, 0.702387f,
    -0.233435f, -0.458122f, 0.857690f,
    -0.470664f, -0.331385f, 0.817716f,
    -0.408646f, -0.571608f, 0.711528f,
    -0.353140f, -0.705839f, 0.614071f,
    -0.325721f, -0.759034f, 0.563713f,
    -0.367569f, -0.686037f, 0.627891f,
    -0.447879f, -0.458787f, 0.767411f,
    -0.665486f, -0.331557f, 0.668728f,
    -0.578122f, -0.571874f, 0.582010f,
    -0.499327f, -0.706097f, 0.502096f,
    -0.459838f, -0.759271f, 0.460496f,
    -0.516816f, -0.686297f, 0.511760f,
    -0.630437f, -0.459060f, 0.625950f,
    -0.815429f, -0.331321f, 0.474660f,
    -0.708771f, -0.571590f, 0.413434f,
    -0.612100f, -0.705839f, 0.356547f,
    -0.563244f, -0.759035f, 0.326530f,
    -0.631489f, -0.686040f, 0.361346f,
    -0.770585f, -0.458832f, 0.442349f,
    -0.910869f, -0.330773f, 0.246794f,
    -0.792274f, -0.570870f, 0.215429f,
    -0.684313f, -0.705168f, 0.185619f,
    -0.629390f, -0.758421f, 0.169311f,
    -0.704260f, -0.685368f, 0.185170f,
    -0.859319f, -0.458188f, 0.227231f,
    -0.943833f, -0.330414f, 0.002283f,
    -0.821403f, -0.570341f, 0.002745f,
    -0.709541f, -0.704661f, 0.001958f,
    -0.652305f, -0.757957f, 0.000466f,
    -0.728669f, -0.684856f, -0.003576f,
    -0.889124f, -0.457656f, -0.003164f,
    -0.912037f, -0.330868f, -0.242313f,
    -0.793697f, -0.570897f, -0.210051f,
    -0.685340f, -0.705168f, -0.181787f,
    -0.629635f, -0.758420f, -0.168401f,
    -0.702387f, -0.685364f, -0.192168f,
    -0.857690f, -0.458122f, -0.233435f,
    -0.817716f, -0.331385f, -0.470664f,
    -0.711528f, -0.571608f, -0.408646f,
    -0.614071f, -0.705839f, -0.353140f,
    -0.563713f, -0.759034f, -0.325721f,
    -0.627891f, -0.686037f, -0.367569f,
    -0.767411f, -0.458787f, -0.447879f,
    -0.668728f, -0.331557f, -0.665486f,
    -0.582010f, -0.571874f, -0.578122f,
    -0.502096f, -0.706097f, -0.499327f,
    -0.460496f, -0.759271f, -0.459838f,
    -0.511760f, -0.686297f, -0.516816f,
    -0.625950f, -0.459060f, -0.630437f,
    -0.474660f, -0.331321f, -0.815429f,
    -0.413434f, -0.571590f, -0.708771f,
    -0.356547f, -0.705839f, -0.612100f,
    -0.326530f, -0.759035f, -0.563244f,
    -0.361346f, -0.686040f, -0.631489f,
    -0.442349f, -0.458832f, -0.770585f,
    -0.246794f, -0.330773f, -0.910869f,
    -0.215429f, -0.570870f, -0.792274f,
    -0.185619f, -0.705168f, -0.684313f,
    -0.169311f, -0.758421f, -0.629390f,
    -0.185170f, -0.685368f, -0.704260f,
    -0.227231f, -0.458188f, -0.859319f,
    -0.002283f, -0.330414f, -0.943833f,
    -0.002745f, -0.570341f, -0.821403f,
    -0.001958f, -0.704661f, -0.709541f,
    -0.000466f, -0.757957f, -0.652305f,
    0.003576f, -0.684856f, -0.728669f,
    0.003164f, -0.457656f, -0.889124f,
    0.242313f, -0.330868f, -0.912037f,
    0.210051f, -0.570897f, -0.793697f,
    0.181787f, -0.705168f, -0.685340f,
    0.168401f, -0.758420f, -0.629635f,
    0.192168f, -0.685364f, -0.702387f,
    0.233435f, -0.458122f, -0.857690f,
    0.470664f, -0.331385f, -0.817716f,
    0.408646f, -0.571608f, -0.711528f,
    0.353140f, -0.705839f, -0.614071f,
    0.325721f, -0.759034f, -0.563713f,
    0.367569f, -0.686037f, -0.627891f,
    0.447879f, -0.458787f, -0.767411f,
    0.665486f, -0.331557f, -0.668728f,
    0.578122f, -0.571874f, -0.582010f,
    0.499327f, -0.706097f, -0.502096f,
    0.459838f, -0.759271f, -0.460496f,
    0.516816f, -0.686297f, -0.511760f,
    0.630437f, -0.459060f, -0.625950f,
    0.815429f, -0.331321f, -0.474660f,
    0.708771f, -0.571590f, -0.413434f,
    0.612100f, -0.705839f, -0.356547f,
    0.563244f, -0.759035f, -0.326530f,
    0.631489f, -0.686040f, -0.361346f,
    0.770585f, -0.458832f, -0.442349f,
    0.910869f, -0.330773f, -0.246794f,
    0.792274f, -0.570870f, -0.215429f,
    0.684313f, -0.705168f, -0.185619f,
    0.629390f, -0.758421f, -0.169311f,
    0.704260f, -0.685368f, -0.185170f,
    0.859319f, -0.458188f, -0.227231f,
    0.777345f, -0.628990f, -0.010332f,
    0.361793f, -0.932236f, -0.006477f,
    0.152402f, -0.988315f, -0.002559f,
    0.066422f, -0.997791f, -0.001190f,
    0.027401f, -0.999624f, -0.001027f,
    0.000000f, -1.000000f, 0.000000f,
    0.753154f, -0.629440f, 0.191218f,
    0.350766f, -0.932386f, 0.087291f,
    0.147688f, -0.988344f, 0.036926f,
    0.064386f, -0.997796f, 0.016021f,
    0.026706f, -0.999625f, 0.006087f,
    0.677297f, -0.629962f, 0.380023f,
    0.315543f, -0.932612f, 0.175124f,
    0.132774f, -0.988389f, 0.073881f,
    0.057900f, -0.997805f, 0.032133f,
    0.024157f, -0.999626f, 0.012794f,
    0.556310f, -0.630147f, 0.541695f,
    0.259523f, -0.932707f, 0.250409f,
    0.109137f, -0.988408f, 0.105540f,
    0.047613f, -0.997809f, 0.045941f,
    0.020018f, -0.999627f, 0.018575f,
    0.398014f, -0.629932f, 0.666911f,
    0.186318f, -0.932635f, 0.308995f,
    0.078296f, -0.988394f, 0.130182f,
    0.034185f, -0.997806f, 0.056696f,
    0.014564f, -0.999627f, 0.023117f,
    0.211443f, -0.629395f, 0.747766f,
    0.099921f, -0.932420f, 0.347287f,
    0.041912f, -0.988352f, 0.146303f,
    0.018338f, -0.997798f, 0.063741f,
    0.008087f, -0.999625f, 0.026150f,
    0.010332f, -0.628990f, 0.777345f,
    0.006477f, -0.932236f, 0.361793f,
    0.002559f, -0.988315f, 0.152402f,
    0.001190f, -0.997791f, 0.066422f,
    0.001027f, -0.999624f, 0.027401f,
    -0.191218f, -0.629440f, 0.753154f,
    -0.087291f, -0.932386f, 0.350766f,
    -0.036926f, -0.988344f, 0.147688f,
    -0.016021f, -0.997796f, 0.064386f,
    -0.006087f, -0.999625f, 0.026706f,
    -0.380023f, -0.629962f, 0.677297f,
    -0.175124f, -0.932612f, 0.315543f,
    -0.073881f, -0.988389f, 0.132774f,
    -0.032133f, -0.997805f, 0.057900f,
    -0.012794f, -0.999626f, 0.024157f,
    -0.541695f, -0.630147f, 0.556310f,
    -0.250409f, -0.932707f, 0.259523f,
    -0.105540f, -0.988408f, 0.109137f,
    -0.045941f, -0.997809f, 0.047613f,
    -0.018575f, -0.999627f, 0.020018f,
    -0.666911f, -0.629932f, 0.398014f,
    -0.308995f, -0.932635f, 0.186318f,
    -0.130182f, -0.988394f, 0.078296f,
    -0.056696f, -0.997806f, 0.034185f,
    -0.023117f, -0.999627f, 0.014564f,
    -0.747766f, -0.629395f, 0.211443f,
    -0.347287f, -0.932420f, 0.099921f,
    -0.146303f, -0.988352f, 0.041912f,
    -0.063741f, -0.997798f, 0.018338f,
    -0.026150f, -0.999625f, 0.008087f,
    -0.777345f, -0.628990f, 0.010332f,
    -0.361793f, -0.932236f, 0.006477f,
    -0.152402f, -0.988315f, 0.002559f,
    -0.066422f, -0.997791f, 0.001190f,
    -0.027401f, -0.999624f, 0.001027f,
    -0.753154f, -0.629440f, -0.191218f,
    -0.350766f, -0.932386f, -0.087291f,
    -0.147688f, -0.988344f, -0.036926f,
    -0.064386f, -0.997796f, -0.016021f,
    -0.026706f, -0.999625f, -0.006087f,
    -0.677297f, -0.629962f, -0.380023f,
    -0.315543f, -0.932612f, -0.175124f,
    -0.132774f, -0.988389f, -0.073881f,
    -0.057900f, -0.997805f, -0.032133f,
    -0.024157f, -0.999626f, -0.012794f,
    -0.556310f, -0.630147f, -0.541695f,
    -0.259523f, -0.932707f, -0.250409f,
    -0.109137f, -0.988408f, -0.105540f,
    -0.047613f, -0.997809f, -0.045941f,
    -0.020018f, -0.999627f, -0.018575f,
    -0.398014f, -0.629932f, -0.666911f,
    -0.186318f, -0.932635f, -0.308995f,
    -0.078296f, -0.988394f, -0.130182f,
    -0.034185f, -0.997806f, -0.056696f,
    -0.014564f, -0.999627f, -0.023117f,
    -0.211443f, -0.629395f, -0.747766f,
    -0.099921f, -0.932420f, -0.347287f,
    -0.041912f, -0.988352f, -0.146303f,
    -0.018338f, -0.997798f, -0.063741f,
    -0.008087f, -0.999625f, -0.026150f,
    -0.010332f, -0.628990f, -0.777345f,
    -0.006477f, -0.932236f, -0.361793f,
    -0.002559f, -0.988315f, -0.152402f,
    -0.001190f, -0.997791f, -0.066422f,
    -0.001027f, -0.999624f, -0.027401f,
    0.191218f, -0.629440f, -0.753154f,
    0.087291f, -0.932386f, -0.350766f,
    0.036926f, -0.988344f, -0.147688f,
    0.016021f, -0.997796f, -0.064386f,
    0.006087f, -0.999625f, -0.026706f,
    0.380023f, -0.629962f, -0.677297f,
    0.175124f, -0.932612f, -0.315543f,
    0.073881f, -0.988389f, -0.132774f,
    0.032133f, -0.997805f, -0.057900f,
    0.012794f, -0.999626f, -0.024157f,
    0.541695f, -0.630147f, -0.556310f,
    0.250409f, -0.932707f, -0.259523f,
    0.105540f, -0.988408f, -0.109137f,
    0.045941f, -0.997809f, -0.047613f,
    0.018575f, -0.999627f, -0.020018f,
    0.666911f, -0.629932f, -0.398014f,
    0.308995f, -0.932635f, -0.186318f,
    0.130182f, -0.988394f, -0.078296f,
    0.056696f, -0.997806f, -0.034185f,
    0.023117f, -0.999627f, -0.014564f,
    0.747766f, -0.629395f, -0.211443f,
    0.347287f, -0.932420f, -0.099921f,
    0.146303f, -0.988352f, -0.041912f,
    0.063741f, -0.997798f, -0.018338f,
    0.026150f, -0.999625f, -0.008087f,
    0.003252f, -0.999017f, 0.044215f,
    0.015240f, -0.999884f, -0.000426f,
    0.059928f, -0.998202f, -0.000876f,
    0.167134f, -0.985934f, -0.001083f,
    0.403838f, -0.914830f, -0.000203f,
    0.792445f, -0.609943f, 0.000242f,
    0.995161f, -0.098254f, -0.001013f,
    0.003195f, -0.927908f, 0.372795f,
    0.015041f, -0.949764f, 0.312606f,
    0.059227f, -0.948266f, 0.311904f,
    0.164453f, -0.933549f, 0.318499f,
    0.388162f, -0.854219f, 0.345890f,
    0.729394f, -0.561905f, 0.390189f,
    0.912351f, -0.095332f, 0.398156f,
    0.002232f, -0.597680f, 0.801731f,
    0.010830f, -0.681497f, 0.731741f,
    0.043613f, -0.679614f, 0.732272f,
    0.120047f, -0.660320f, 0.741327f,
    0.267930f, -0.580441f, 0.768962f,
    0.467285f, -0.367107f, 0.804287f,
    0.584006f, -0.067606f, 0.808929f,
    -0.000653f, 0.152635f, 0.988282f,
    -0.002559f, 0.000905f, 0.999996f,
    -0.007405f, 0.000384f, 0.999972f,
    -0.016090f, -0.004746f, 0.999859f,
    -0.025703f, -0.019620f, 0.999477f,
    -0.020936f, -0.035053f, 0.999166f,
    -0.002824f, -0.023899f, 0.999710f,
    -0.003296f, 0.756255f, 0.654269f,
    -0.015405f, 0.681251f, 0.731887f,
    -0.059217f, 0.676283f, 0.734258f,
    -0.158438f, 0.643792f, 0.748619f,
    -0.334170f, 0.526967f, 0.781432f,
    -0.518177f, 0.278028f, 0.808822f,
    -0.588929f, 0.016391f, 0.808019f,
    -0.004352f, 0.967350f, 0.253408f,
    -0.020677f, 0.949300f, 0.313691f,
    -0.081844f, 0.945117f, 0.316317f,
    -0.226175f, 0.916097f, 0.331076f,
    -0.500500f, 0.784289f, 0.366594f,
    -0.804374f, 0.439635f, 0.399630f,
    -0.916460f, 0.037237f, 0.398390f,
    -0.004517f, 0.999011f, -0.044228f,
    -0.021584f, 0.999767f, 0.000265f,
    -0.086245f, 0.996274f, 0.000157f,
    -0.240673f, 0.970606f, -0.000608f,
    -0.540280f, 0.841484f, -0.001597f,
    -0.877811f, 0.479008f, 0.000390f,
    -0.999074f, 0.043021f, 0.000686f,
    -0.004094f, 0.927919f, -0.372759f,
    -0.019687f, 0.949518f, -0.313093f,
    -0.079023f, 0.945545f, -0.315752f,
    -0.219600f, 0.917458f, -0.331734f,
    -0.488715f, 0.790534f, -0.369071f,
    -0.797673f, 0.452036f, -0.399226f,
    -0.916555f, 0.045675f, -0.397293f,
    -0.002516f, 0.597699f, -0.801716f,
    -0.012433f, 0.681272f, -0.731925f,
    -0.050950f, 0.677183f, -0.734048f,
    -0.140298f, 0.648898f, -0.747829f,
    -0.303501f, 0.546934f, -0.780224f,
    -0.495541f, 0.315794f, -0.809143f,
    -0.586888f, 0.043544f, -0.808497f,
    0.000557f, -0.152599f, -0.988288f,
    0.002074f, -0.000969f, -0.999997f,
    0.005499f, -0.001410f, -0.999984f,
    0.011569f, 0.000546f, -0.999933f,
    0.019331f, 0.010342f, -0.999760f,
    0.017294f, 0.025347f, -0.999529f,
    0.002733f, 0.020710f, -0.999782f,
    0.002668f, -0.756195f, -0.654340f,
    0.012416f, -0.681586f, -0.731633f,
    0.047946f, -0.679845f, -0.731787f,
    0.130533f, -0.659594f, -0.740200f,
    0.293034f, -0.569168f, -0.768231f,
    0.500213f, -0.318883f, -0.805047f,
    0.587808f, -0.026599f, -0.808563f,
    0.003191f, -0.967332f, -0.253494f,
    0.014981f, -0.949482f, -0.313464f,
    0.058954f, -0.947784f, -0.313417f,
    0.164056f, -0.933187f, -0.319761f,
    0.391212f, -0.853217f, -0.344925f,
    0.743675f, -0.542841f, -0.390219f,
    0.913602f, -0.073956f, -0.399828f,
    0.972925f, 0.231121f, -0.000918f,
    0.912330f, 0.409438f, -0.003849f,
    0.828029f, 0.560649f, -0.006408f,
    0.716807f, 0.697239f, -0.006712f,
    0.575989f, 0.817451f, -0.003302f,
    0.495133f, 0.867633f, -0.045350f,
    0.893985f, 0.213142f, 0.394158f,
    0.840605f, 0.383895f, 0.382108f,
    0.768860f, 0.531454f, 0.355543f,
    0.672509f, 0.665677f, 0.323426f,
    0.545610f, 0.779633f, 0.307380f,
    0.479303f, 0.843050f, 0.244000f,
    0.576388f, 0.133958f, 0.806122f,
    0.544470f, 0.253746f, 0.799478f,
    0.508754f, 0.364144f, 0.780108f,
    0.461180f, 0.471780f, 0.751490f,
    0.387281f, 0.561166f, 0.731509f,
    0.371347f, 0.666129f, 0.646818f,
    0.002410f, -0.014515f, 0.999892f,
    0.001301f, -0.016411f, 0.999865f,
    0.000720f, -0.020201f, 0.999796f,
    0.003256f, -0.021359f, 0.999767f,
    0.008876f, -0.013337f, 0.999872f,
    0.072759f, 0.131709f, 0.988615f,
    -0.569088f, -0.161451f, 0.806271f,
    -0.524317f, -0.294841f, 0.798850f,
    -0.472635f, -0.410610f, 0.779754f,
    -0.415783f, -0.508606f, 0.753953f,
    -0.349674f, -0.579676f, 0.736006f,
    -0.279208f, -0.530698f, 0.800252f,
    -0.885693f, -0.241406f, 0.396574f,
    -0.803204f, -0.449996f, 0.390343f,
    -0.697513f, -0.613444f, 0.370354f,
    -0.588462f, -0.732277f, 0.342757f,
    -0.485206f, -0.813008f, 0.321860f,
    -0.425879f, -0.823534f, 0.374725f,
    -0.965787f, -0.259335f, 0.000592f,
    -0.872611f, -0.488406f, 0.003010f,
    -0.748651f, -0.662945f, 0.005037f,
    -0.622443f, -0.782648f, 0.005056f,
    -0.509112f, -0.860697f, 0.002551f,
    -0.455515f, -0.889038f, 0.046023f,
    -0.888605f, -0.232245f, -0.395529f,
    -0.809378f, -0.443445f, -0.385051f,
    -0.704052f, -0.611598f, -0.360913f,
    -0.592713f, -0.733528f, -0.332607f,
    -0.486334f, -0.814293f, -0.316868f,
    -0.441890f, -0.860789f, -0.252538f,
    -0.574477f, -0.139332f, -0.806575f,
    -0.532235f, -0.275661f, -0.800460f,
    -0.480844f, -0.396171f, -0.782201f,
    -0.423172f, -0.499323f, -0.756044f,
    -0.355443f, -0.574187f, -0.737543f,
    -0.348424f, -0.670745f, -0.654753f,
    -0.001891f, 0.012937f, -0.999915f,
    0.001397f, 0.011921f, -0.999928f,
    0.005089f, 0.014178f, -0.999887f,
    0.004896f, 0.016722f, -0.999848f,
    -0.002003f, 0.012285f, -0.999922f,
    -0.068183f, -0.130578f, -0.989091f,
    0.573387f, 0.149188f, -0.805587f,
    0.541227f, 0.266714f, -0.797456f,
    0.503525f, 0.377270f, -0.777258f,
    0.451452f, 0.484144f, -0.749530f,
    0.372386f, 0.571022f, -0.731616f,
    0.289707f, 0.529053f, -0.797604f,
    0.892654f, 0.216131f, -0.395546f,
    0.837234f, 0.384836f, -0.388510f,
    0.763231f, 0.531640f, -0.367202f,
    0.665469f, 0.666102f, -0.336837f,
    0.537995f, 0.781974f, -0.314766f,
    0.455324f, 0.810920f, -0.367545f,
    -0.145927f, 0.987044f, 0.066705f,
    -0.350253f, 0.936641f, -0.005157f,
    -0.710995f, 0.703191f, -0.003047f,
    -0.899400f, 0.437101f, 0.004678f,
    -0.930238f, 0.366579f, 0.016656f,
    -0.845840f, 0.533040f, 0.020564f,
    -0.646372f, 0.763018f, 0.002776f,
    -0.128906f, 0.841567f, 0.524546f,
    -0.292019f, 0.852082f, 0.434375f,
    -0.615355f, 0.675119f, 0.406882f,
    -0.799678f, 0.453205f, 0.393853f,
    -0.814130f, 0.384381f, 0.435251f,
    -0.711742f, 0.496654f, 0.496746f,
    -0.538718f, 0.683956f, 0.491922f,
    -0.054328f, 0.445430f, 0.893667f,
    -0.120328f, 0.535740f, 0.835765f,
    -0.285367f, 0.495269f, 0.820533f,
    -0.427214f, 0.405516f, 0.808112f,
    -0.455262f, 0.354182f, 0.816880f,
    -0.386518f, 0.375163f, 0.842530f,
    -0.289150f, 0.468105f, 0.835027f,
    0.075157f, -0.092491f, 0.992873f,
    0.130249f, 0.040179f, 0.990667f,
    0.205304f, 0.124938f, 0.970691f,
    0.176764f, 0.184322f, 0.966840f,
    0.082193f, 0.182483f, 0.979767f,
    0.009842f, 0.124532f, 0.992167f,
    -0.004171f, 0.105296f, 0.994432f,
    0.213849f, -0.587755f, 0.780264f,
    0.361728f, -0.447069f, 0.818097f,
    0.601635f, -0.258541f, 0.755772f,
    0.672221f, -0.099063f, 0.733693f,
    0.583247f, -0.084870f, 0.807849f,
    0.409251f, -0.235708f, 0.881451f,
    0.284284f, -0.385654f, 0.877755f,
    0.302637f, -0.880762f, 0.364237f,
    0.496428f, -0.756105f, 0.426456f,
    0.790450f, -0.487110f, 0.371365f,
    0.895860f, -0.277360f, 0.347141f,
    0.865262f, -0.295907f, 0.404673f,
    0.690272f, -0.542643f, 0.478606f,
    0.467747f, -0.753579f, 0.461879f,
    0.321563f, -0.944505f, -0.067141f,
    0.531566f, -0.847002f, 0.005046f,
    0.833505f, -0.552508f, 0.002163f,
    0.944185f, -0.329343f, -0.006880f,
    0.932318f, -0.361245f, -0.016874f,
    0.768639f, -0.639601f, -0.010215f,
    0.513002f, -0.858387f, 0.000964f,
    0.278331f, -0.809595f, -0.516806f,
    0.491568f, -0.763636f, -0.418594f,
    0.788478f, -0.493107f, -0.367624f,
    0.891089f, -0.275271f, -0.360815f,
    0.856479f, -0.282922f, -0.431739f,
    0.692218f, -0.527331f, -0.492704f,
    0.473487f, -0.749262f, -0.463052f,
    0.166654f, -0.429938f, -0.887344f,
    0.339768f, -0.458348f, -0.821264f,
    0.590160f, -0.276240f, -0.758553f,
    0.668115f, -0.103914f, -0.736766f,
    0.590009f, -0.076740f, -0.803741f,
    0.433287f, -0.219357f, -0.874154f,
    0.299036f, -0.368898f, -0.880052f,
    0.027869f, 0.102187f, -0.994375f,
    0.088152f, 0.031815f, -0.995599f,
    0.174456f, 0.096185f, -0.979956f,
    0.188708f, 0.161291f, -0.968697f,
    0.127686f, 0.175774f, -0.976115f,
    0.054509f, 0.130986f, -0.989885f,
    0.015877f, 0.116730f, -0.993037f,
    -0.081072f, 0.607187f, -0.790412f,
    -0.164116f, 0.522469f, -0.836715f,
    -0.319626f, 0.463405f, -0.826495f,
    -0.422971f, 0.383450f, -0.821013f,
    -0.424534f, 0.353597f, -0.833511f,
    -0.351612f, 0.388106f, -0.851905f,
    -0.270475f, 0.475063f, -0.837352f,
    -0.133739f, 0.917541f, -0.374476f,
    -0.316043f, 0.839490f, -0.442011f,
    -0.631181f, 0.656649f, -0.412823f,
    -0.807405f, 0.443017f, -0.389658f,
    -0.821659f, 0.386229f, -0.419171f,
    -0.707748f, 0.517393f, -0.481037f,
    -0.526814f, 0.693790f, -0.491043f,
    -0.461017f, 0.887371f, -0.005987f,
    -0.290675f, 0.956710f, -0.014601f,
    0.085518f, 0.995086f, -0.049913f,
    0.887713f, 0.456166f, -0.062285f,
    0.822992f, -0.567263f, 0.029937f,
    0.659878f, -0.743158f, 0.110798f,
    -0.391094f, 0.831360f, 0.394824f,
    -0.253310f, 0.936825f, 0.241231f,
    0.015366f, 0.995010f, -0.098588f,
    0.520185f, 0.549881f, -0.653482f,
    0.628856f, -0.382376f, -0.677000f,
    0.578948f, -0.646092f, -0.497378f,
    -0.223422f, 0.660928f, 0.716420f,
    -0.156131f, 0.874986f, 0.458282f,
    -0.036467f, 0.998264f, -0.046261f,
    0.156637f, 0.682491f, -0.713913f,
    0.263632f, 0.005571f, -0.964607f,
    0.312409f, -0.324778f, -0.892704f,
    -0.001751f, 0.339383f, 0.940647f,
    -0.021119f, 0.759902f, 0.649695f,
    -0.044404f, 0.998121f, 0.042219f,
    -0.032529f, 0.802862f, -0.595277f,
    -0.008745f, 0.371564f, -0.928366f,
    0.042529f, 0.077913f, -0.996053f,
    0.280020f, -0.238192f, 0.929975f,
    0.227305f, 0.491486f, 0.840699f,
    -0.003105f, 0.987407f, 0.158172f,
    -0.143918f, 0.895866f, -0.420370f,
    -0.200177f, 0.683872f, -0.701604f,
    -0.187188f, 0.500198f, -0.845437f,
    0.453673f, -0.746835f, 0.486229f,
    0.692158f, -0.080062f, 0.717291f,
    0.185758f, 0.942536f, 0.277704f,
    -0.211188f, 0.955274f, -0.207004f,
    -0.312961f, 0.881061f, -0.354665f,
    -0.336331f, 0.811345f, -0.478122f,
    0.482445f, -0.875816f, -0.013906f,
    0.913013f, -0.405572f, -0.043811f,
    0.506909f, 0.853920f, 0.117742f,
    -0.234033f, 0.972124f, 0.014295f,
    -0.348033f, 0.937468f, 0.005277f,
    -0.384064f, 0.921073f, -0.064185f,
    0.457762f, -0.717668f, -0.524792f,
    0.683347f, -0.063014f, -0.727369f,
    0.357361f, 0.898186f, -0.256038f,
    -0.207010f, 0.947863f, 0.242287f,
    -0.314387f, 0.872357f, 0.374372f,
    -0.361040f, 0.872819f, 0.328385f,
    0.280225f, -0.218552f, -0.934724f,
    0.261124f, 0.434074f, -0.862203f,
    0.060553f, 0.978577f, -0.196775f,
    -0.131809f, 0.881094f, 0.454203f,
    -0.195016f, 0.658858f, 0.726550f,
    -0.247824f, 0.630359f, 0.735684f,
    0.008860f, 0.321862f, -0.946745f,
    0.001382f, 0.733189f, -0.680023f,
    -0.012720f, 0.997949f, -0.062734f,
    -0.011656f, 0.785221f, 0.619106f,
    0.000967f, 0.344022f, 0.938961f,
    -0.037360f, 0.214324f, 0.976048f,
    -0.213360f, 0.648838f, -0.730401f,
    -0.140052f, 0.865891f, -0.480227f,
    -0.000809f, 0.999500f, 0.031611f,
    0.194529f, 0.659081f, 0.726478f,
    0.266832f, -0.005234f, 0.963729f,
    0.219380f, -0.217247f, 0.951145f,
    -0.384886f, 0.827121f, -0.409553f,
    -0.240915f, 0.932642f, -0.268588f,
    0.065830f, 0.996786f, 0.045658f,
    0.597011f, 0.507703f, 0.621141f,
    0.613004f, -0.369418f, 0.698395f,
    0.486873f, -0.566787f, 0.664610f,
    0.000000f, 1.000000f, 0.000000f,
    0.395791f, 0.918207f, 0.015676f,
    0.964544f, 0.263762f, 0.009177f,
    0.839041f, -0.544056f, -0.003654f,
    0.788969f, -0.614430f, 0.001943f,
    0.991025f, -0.133647f, 0.002953f,
    0.732531f, 0.680606f, -0.013206f,
    0.377669f, 0.918491f, 0.117221f,
    0.929557f, 0.263662f, 0.257694f,
    0.811158f, -0.544801f, 0.212638f,
    0.761156f, -0.615195f, 0.205370f,
    0.956515f, -0.133833f, 0.259168f,
    0.710689f, 0.680955f, 0.176694f,
    0.333696f, 0.918791f, 0.210878f,
    0.830713f, 0.263784f, 0.490239f,
    0.727549f, -0.545809f, 0.415650f,
    0.681011f, -0.616288f, 0.395491f,
    0.856413f, -0.134443f, 0.498480f,
    0.640176f, 0.681271f, 0.355027f,
    0.267591f, 0.918878f, 0.289928f,
    0.675416f, 0.263955f, 0.688579f,
    0.594970f, -0.546203f, 0.589638f,
    0.555330f, -0.616730f, 0.557901f,
    0.698694f, -0.134804f, 0.702606f,
    0.526898f, 0.681345f, 0.508082f,
    0.183499f, 0.918711f, 0.349712f,
    0.474031f, 0.264098f, 0.839969f,
    0.422194f, -0.545768f, 0.723802f,
    0.392296f, -0.616276f, 0.682867f,
    0.493598f, -0.134679f, 0.859199f,
    0.378184f, 0.681197f, 0.626856f,
    0.086498f, 0.918378f, 0.386136f,
    0.239605f, 0.264096f, 0.934261f,
    0.219887f, -0.544743f, 0.809262f,
    0.201667f, -0.615183f, 0.762155f,
    0.253529f, -0.134173f, 0.957977f,
    0.202631f, 0.680866f, 0.703820f,
    -0.015676f, 0.918207f, 0.395791f,
    -0.009177f, 0.263762f, 0.964544f,
    0.003654f, -0.544057f, 0.839041f,
    -0.001943f, -0.614430f, 0.788969f,
    -0.002953f, -0.133647f, 0.991025f,
    0.013206f, 0.680606f, 0.732531f,
    -0.117221f, 0.918491f, 0.377669f,
    -0.257694f, 0.263662f, 0.929557f,
    -0.212638f, -0.544801f, 0.811158f,
    -0.205370f, -0.615195f, 0.761156f,
    -0.259168f, -0.133833f, 0.956515f,
    -0.176694f, 0.680955f, 0.710689f,
    -0.210878f, 0.918791f, 0.333696f,
    -0.490239f, 0.263784f, 0.830713f,
    -0.415650f, -0.545809f, 0.727549f,
    -0.395491f, -0.616288f, 0.681011f,
    -0.498480f, -0.134443f, 0.856413f,
    -0.355027f, 0.681271f, 0.640176f,
    -0.289928f, 0.918878f, 0.267591f,
    -0.688579f, 0.263955f, 0.675416f,
    -0.589638f, -0.546203f, 0.594970f,
    -0.557901f, -0.616730f, 0.555330f,
    -0.702606f, -0.134804f, 0.698694f,
    -0.508082f, 0.681345f, 0.526898f,
    -0.349712f, 0.918711f, 0.183499f,
    -0.839969f, 0.264098f, 0.474031f,
    -0.723802f, -0.545768f, 0.422194f,
    -0.682867f, -0.616276f, 0.392296f,
    -0.859199f, -0.134679f, 0.493598f,
    -0.626856f, 0.681197f, 0.378184f,
    -0.386136f, 0.918378f, 0.086498f,
    -0.934261f, 0.264096f, 0.239605f,
    -0.809262f, -0.544743f, 0.219887f,
    -0.762155f, -0.615183f, 0.201667f,
    -0.957977f, -0.134173f, 0.253529f,
    -0.703820f, 0.680866f, 0.202631f,
    -0.395791f, 0.918207f, -0.015676f,
    -0.964544f, 0.263762f, -0.009177f,
    -0.839041f, -0.544057f, 0.003654f,
    -0.788969f, -0.614430f, -0.001943f,
    -0.991025f, -0.133647f, -0.002953f,
    -0.732531f, 0.680606f, 0.013206f,
    -0.377669f, 0.918491f, -0.117221f,
    -0.929557f, 0.263662f, -0.257694f,
    -0.811158f, -0.544801f, -0.212638f,
    -0.761156f, -0.615195f, -0.205370f,
    -0.956515f, -0.133833f, -0.259168f,
    -0.710689f, 0.680955f, -0.176694f,
    -0.333696f, 0.918791f, -0.210878f,
    -0.830713f, 0.263784f, -0.490239f,
    -0.727549f, -0.545809f, -0.415650f,
    -0.681011f, -0.616288f, -0.395491f,
    -0.856413f, -0.134443f, -0.498480f,
    -0.640176f, 0.681271f, -0.355027f,
    -0.267591f, 0.918878f, -0.289928f,
    -0.675416f, 0.263955f, -0.688579f,
    -0.594970f, -0.546203f, -0.589638f,
    -0.555330f, -0.616730f, -0.557901f,
    -0.698694f, -0.134804f, -0.702606f,
    -0.526898f, 0.681345f, -0.508082f,
    -0.183499f, 0.918711f, -0.349712f,
    -0.474031f, 0.264098f, -0.839969f,
    -0.422194f, -0.545768f, -0.723802f,
    -0.392296f, -0.616276f, -0.682867f,
    -0.493598f, -0.134679f, -0.859199f,
    -0.378184f, 0.681197f, -0.626856f,
    -0.086498f, 0.918378f, -0.386136f,
    -0.239605f, 0.264096f, -0.934261f,
    -0.219887f, -0.544743f, -0.809262f,
    -0.201667f, -0.615183f, -0.762155f,
    -0.253529f, -0.134173f, -0.957977f,
    -0.202631f, 0.680866f, -0.703820f,
    0.015676f, 0.918207f, -0.395791f,
    0.009177f, 0.263762f, -0.964544f,
    -0.003654f, -0.544057f, -0.839041f,
    0.001943f, -0.614430f, -0.788969f,
    0.002953f, -0.133647f, -0.991025f,
    -0.013206f, 0.680606f, -0.732531f,
    0.117221f, 0.918491f, -0.377669f,
    0.257694f, 0.263662f, -0.929557f,
    0.212638f, -0.544801f, -0.811158f,
    0.205370f, -0.615195f, -0.761156f,
    0.259168f, -0.133833f, -0.956515f,
    0.176694f, 0.680955f, -0.710689f,
    0.210878f, 0.918791f, -0.333696f,
    0.490239f, 0.263784f, -0.830713f,
    0.415650f, -0.545809f, -0.727549f,
    0.395491f, -0.616288f, -0.681011f,
    0.498480f, -0.134443f, -0.856413f,
    0.355027f, 0.681271f, -0.640176f,
    0.289928f, 0.918878f, -0.267591f,
    0.688579f, 0.263955f, -0.675416f,
    0.589638f, -0.546203f, -0.594970f,
    0.557901f, -0.616730f, -0.555330f,
    0.702606f, -0.134804f, -0.698694f,
    0.508082f, 0.681345f, -0.526898f,
    0.349712f, 0.918711f, -0.183499f,
    0.839969f, 0.264098f, -0.474031f,
    0.723802f, -0.545768f, -0.422194f,
    0.682867f, -0.616276f, -0.392296f,
    0.859199f, -0.134679f, -0.493598f,
    0.626856f, 0.681197f, -0.378184f,
    0.386136f, 0.918378f, -0.086498f,
    0.934261f, 0.264096f, -0.239605f,
    0.809262f, -0.544743f, -0.219887f,
    0.762155f, -0.615183f, -0.201667f,
    0.957977f, -0.134173f, -0.253529f,
    0.703820f, 0.680866f, -0.202631f,
    0.299763f, 0.954005f, -0.004004f,
    0.180158f, 0.983637f, -0.001176f,
    0.158462f, 0.987365f, 0.000232f,
    0.213709f, 0.976895f, 0.002171f,
    0.489301f, 0.872063f, 0.009504f,
    0.686607f, 0.726410f, -0.029990f,
    0.290238f, 0.954117f, 0.073644f,
    0.174086f, 0.983681f, 0.045452f,
    0.152777f, 0.987401f, 0.041212f,
    0.205547f, 0.976963f, 0.057393f,
    0.469598f, 0.872357f, 0.135911f,
    0.670656f, 0.726754f, 0.148493f,
    0.260698f, 0.954280f, 0.146242f,
    0.156021f, 0.983742f, 0.088932f,
    0.136587f, 0.987448f, 0.079312f,
    0.183282f, 0.977046f, 0.108577f,
    0.417739f, 0.872696f, 0.252776f,
    0.608331f, 0.727460f, 0.317389f,
    0.214008f, 0.954348f, 0.208377f,
    0.127716f, 0.983767f, 0.126063f,
    0.111442f, 0.987466f, 0.111767f,
    0.149005f, 0.977076f, 0.152056f,
    0.338347f, 0.872812f, 0.351738f,
    0.505565f, 0.727811f, 0.463351f,
    0.153158f, 0.954293f, 0.256647f,
    0.090962f, 0.983745f, 0.154830f,
    0.078913f, 0.987448f, 0.136822f,
    0.104831f, 0.977040f, 0.185479f,
    0.236319f, 0.872663f, 0.427333f,
    0.369272f, 0.727651f, 0.578067f,
    0.081449f, 0.954136f, 0.288080f,
    0.047744f, 0.983685f, 0.173450f,
    0.040760f, 0.987400f, 0.152903f,
    0.053164f, 0.976955f, 0.206721f,
    0.117360f, 0.872307f, 0.474665f,
    0.207008f, 0.727038f, 0.654648f,
    0.004004f, 0.954005f, 0.299763f,
    0.001176f, 0.983637f, 0.180158f,
    -0.000232f, 0.987365f, 0.158462f,
    -0.002171f, 0.976895f, 0.213709f,
    -0.009504f, 0.872063f, 0.489301f,
    0.029990f, 0.726410f, 0.686607f,
    -0.073644f, 0.954117f, 0.290238f,
    -0.045452f, 0.983681f, 0.174086f,
    -0.041212f, 0.987401f, 0.152777f,
    -0.057393f, 0.976963f, 0.205547f,
    -0.135911f, 0.872357f, 0.469598f,
    -0.148493f, 0.726754f, 0.670656f,
    -0.146242f, 0.954280f, 0.260698f,
    -0.088932f, 0.983742f, 0.156021f,
    -0.079312f, 0.987448f, 0.136587f,
    -0.108577f, 0.977046f, 0.183282f,
    -0.252776f, 0.872696f, 0.417739f,
    -0.317389f, 0.727460f, 0.608331f,
    -0.208377f, 0.954348f, 0.214008f,
    -0.126063f, 0.983767f, 0.127716f,
    -0.111767f, 0.987466f, 0.111442f,
    -0.152056f, 0.977076f, 0.149005f,
    -0.351738f, 0.872812f, 0.338347f,
    -0.463351f, 0.727811f, 0.505565f,
    -0.256647f, 0.954293f, 0.153158f,
    -0.154830f, 0.983745f, 0.090962f,
    -0.136822f, 0.987448f, 0.078913f,
    -0.185479f, 0.977040f, 0.104831f,
    -0.427333f, 0.872663f, 0.236319f,
    -0.578067f, 0.727651f, 0.369272f,
    -0.288080f, 0.954136f, 0.081449f,
    -0.173450f, 0.983685f, 0.047744f,
    -0.152903f, 0.987400f, 0.040760f,
    -0.206721f, 0.976955f, 0.053164f,
    -0.474665f, 0.872307f, 0.117360f,
    -0.654648f, 0.727038f, 0.207008f,
    -0.299763f, 0.954005f, 0.004004f,
    -0.180158f, 0.983637f, 0.001176f,
    -0.158462f, 0.987365f, -0.000232f,
    -0.213709f, 0.976895f, -0.002171f,
    -0.489301f, 0.872063f, -0.009504f,
    -0.686607f, 0.726410f, 0.029990f,
    -0.290238f, 0.954117f, -0.073644f,
    -0.174086f, 0.983681f, -0.045452f,
    -0.152777f, 0.987401f, -0.041212f,
    -0.205547f, 0.976963f, -0.057393f,
    -0.469598f, 0.872357f, -0.135911f,
    -0.670656f, 0.726754f, -0.148493f,
    -0.260698f, 0.954280f, -0.146242f,
    -0.156021f, 0.983742f, -0.088932f,
    -0.136587f, 0.987448f, -0.079312f,
    -0.183282f, 0.977046f, -0.108577f,
    -0.417739f, 0.872696f, -0.252776f,
    -0.608331f, 0.727460f, -0.317389f,
    -0.214008f, 0.954348f, -0.208377f,
    -0.127716f, 0.983767f, -0.126063f,
    -0.111442f, 0.987466f, -0.111767f,
    -0.149005f, 0.977076f, -0.152056f,
    -0.338347f, 0.872812f, -0.351738f,
    -0.505565f, 0.727811f, -0.463351f,
    -0.153158f, 0.954293f, -0.256647f,
    -0.090962f, 0.983745f, -0.154830f,
    -0.078913f, 0.987448f, -0.136822f,
    -0.104831f, 0.977040f, -0.185479f,
    -0.236319f, 0.872663f, -0.427333f,
    -0.369272f, 0.727651f, -0.578067f,
    -0.081449f, 0.954136f, -0.288080f,
    -0.047744f, 0.983685f, -0.173450f,
    -0.040760f, 0.987400f, -0.152903f,
    -0.053164f, 0.976955f, -0.206721f,
    -0.117360f, 0.872307f, -0.474665f,
    -0.207008f, 0.727038f, -0.654648f,
    -0.004004f, 0.954005f, -0.299763f,
    -0.001176f, 0.983637f, -0.180158f,
    0.000232f, 0.987365f, -0.158462f,
    0.002171f, 0.976895f, -0.213709f,
    0.009504f, 0.872063f, -0.489301f,
    -0.029990f, 0.726410f, -0.686607f,
    0.073644f, 0.954117f, -0.290238f,
    0.045452f, 0.983681f, -0.174086f,
    0.041212f, 0.987401f, -0.152777f,
    0.057393f, 0.976963f, -0.205547f,
    0.135911f, 0.872357f, -0.469598f,
    0.148493f, 0.726754f, -0.670656f,
    0.146242f, 0.954280f, -0.260698f,
    0.088932f, 0.983742f, -0.156021f,
    0.079312f, 0.987448f, -0.136587f,
    0.108577f, 0.977046f, -0.183282f,
    0.252776f, 0.872696f, -0.417739f,
    0.317389f, 0.727460f, -0.608331f,
    0.208377f, 0.954348f, -0.214008f,
    0.126063f, 0.983767f, -0.127716f,
    0.111767f, 0.987466f, -0.111442f,
    0.152056f, 0.977076f, -0.149005f,
    0.351738f, 0.872812f, -0.338347f,
    0.463351f, 0.727811f, -0.505565f,
    0.256647f, 0.954293f, -0.153158f,
    0.154830f, 0.983745f, -0.090962f,
    0.136822f, 0.987448f, -0.078913f,
    0.185479f, 0.977040f, -0.104831f,
    0.427333f, 0.872663f, -0.236319f,
    0.578067f, 0.727651f, -0.369272f,
    0.288080f, 0.954136f, -0.081449f,
    0.173450f, 0.983685f, -0.047744f,
    0.152903f, 0.987400f, -0.040760f,
    0.206721f, 0.976955f, -0.053164f,
    0.474665f, 0.872307f, -0.117360f,
    0.654648f, 0.727038f, -0.207008f,
};
static D3DXVECTOR3* teapotNormals = ( D3DXVECTOR3* )teapotNormalsfloats;

static WORD teapotIndices[NUMTEAPOTINDICES] =
{
    0, 7, 8,
    8, 1, 0,
    1, 8, 9,
    9, 2, 1,
    2, 9, 10,
    10, 3, 2,
    3, 10, 11,
    11, 4, 3,
    4, 11, 12,
    12, 5, 4,
    5, 12, 13,
    13, 6, 5,
    7, 14, 15,
    15, 8, 7,
    8, 15, 16,
    16, 9, 8,
    9, 16, 17,
    17, 10, 9,
    10, 17, 18,
    18, 11, 10,
    11, 18, 19,
    19, 12, 11,
    12, 19, 20,
    20, 13, 12,
    14, 21, 22,
    22, 15, 14,
    15, 22, 23,
    23, 16, 15,
    16, 23, 24,
    24, 17, 16,
    17, 24, 25,
    25, 18, 17,
    18, 25, 26,
    26, 19, 18,
    19, 26, 27,
    27, 20, 19,
    21, 28, 29,
    29, 22, 21,
    22, 29, 30,
    30, 23, 22,
    23, 30, 31,
    31, 24, 23,
    24, 31, 32,
    32, 25, 24,
    25, 32, 33,
    33, 26, 25,
    26, 33, 34,
    34, 27, 26,
    28, 35, 36,
    36, 29, 28,
    29, 36, 37,
    37, 30, 29,
    30, 37, 38,
    38, 31, 30,
    31, 38, 39,
    39, 32, 31,
    32, 39, 40,
    40, 33, 32,
    33, 40, 41,
    41, 34, 33,
    35, 42, 43,
    43, 36, 35,
    36, 43, 44,
    44, 37, 36,
    37, 44, 45,
    45, 38, 37,
    38, 45, 46,
    46, 39, 38,
    39, 46, 47,
    47, 40, 39,
    40, 47, 48,
    48, 41, 40,
    42, 49, 50,
    50, 43, 42,
    43, 50, 51,
    51, 44, 43,
    44, 51, 52,
    52, 45, 44,
    45, 52, 53,
    53, 46, 45,
    46, 53, 54,
    54, 47, 46,
    47, 54, 55,
    55, 48, 47,
    49, 56, 57,
    57, 50, 49,
    50, 57, 58,
    58, 51, 50,
    51, 58, 59,
    59, 52, 51,
    52, 59, 60,
    60, 53, 52,
    53, 60, 61,
    61, 54, 53,
    54, 61, 62,
    62, 55, 54,
    56, 63, 64,
    64, 57, 56,
    57, 64, 65,
    65, 58, 57,
    58, 65, 66,
    66, 59, 58,
    59, 66, 67,
    67, 60, 59,
    60, 67, 68,
    68, 61, 60,
    61, 68, 69,
    69, 62, 61,
    63, 70, 71,
    71, 64, 63,
    64, 71, 72,
    72, 65, 64,
    65, 72, 73,
    73, 66, 65,
    66, 73, 74,
    74, 67, 66,
    67, 74, 75,
    75, 68, 67,
    68, 75, 76,
    76, 69, 68,
    70, 77, 78,
    78, 71, 70,
    71, 78, 79,
    79, 72, 71,
    72, 79, 80,
    80, 73, 72,
    73, 80, 81,
    81, 74, 73,
    74, 81, 82,
    82, 75, 74,
    75, 82, 83,
    83, 76, 75,
    77, 84, 85,
    85, 78, 77,
    78, 85, 86,
    86, 79, 78,
    79, 86, 87,
    87, 80, 79,
    80, 87, 88,
    88, 81, 80,
    81, 88, 89,
    89, 82, 81,
    82, 89, 90,
    90, 83, 82,
    84, 91, 92,
    92, 85, 84,
    85, 92, 93,
    93, 86, 85,
    86, 93, 94,
    94, 87, 86,
    87, 94, 95,
    95, 88, 87,
    88, 95, 96,
    96, 89, 88,
    89, 96, 97,
    97, 90, 89,
    91, 98, 99,
    99, 92, 91,
    92, 99, 100,
    100, 93, 92,
    93, 100, 101,
    101, 94, 93,
    94, 101, 102,
    102, 95, 94,
    95, 102, 103,
    103, 96, 95,
    96, 103, 104,
    104, 97, 96,
    98, 105, 106,
    106, 99, 98,
    99, 106, 107,
    107, 100, 99,
    100, 107, 108,
    108, 101, 100,
    101, 108, 109,
    109, 102, 101,
    102, 109, 110,
    110, 103, 102,
    103, 110, 111,
    111, 104, 103,
    105, 112, 113,
    113, 106, 105,
    106, 113, 114,
    114, 107, 106,
    107, 114, 115,
    115, 108, 107,
    108, 115, 116,
    116, 109, 108,
    109, 116, 117,
    117, 110, 109,
    110, 117, 118,
    118, 111, 110,
    112, 119, 120,
    120, 113, 112,
    113, 120, 121,
    121, 114, 113,
    114, 121, 122,
    122, 115, 114,
    115, 122, 123,
    123, 116, 115,
    116, 123, 124,
    124, 117, 116,
    117, 124, 125,
    125, 118, 117,
    119, 126, 127,
    127, 120, 119,
    120, 127, 128,
    128, 121, 120,
    121, 128, 129,
    129, 122, 121,
    122, 129, 130,
    130, 123, 122,
    123, 130, 131,
    131, 124, 123,
    124, 131, 132,
    132, 125, 124,
    126, 133, 134,
    134, 127, 126,
    127, 134, 135,
    135, 128, 127,
    128, 135, 136,
    136, 129, 128,
    129, 136, 137,
    137, 130, 129,
    130, 137, 138,
    138, 131, 130,
    131, 138, 139,
    139, 132, 131,
    133, 140, 141,
    141, 134, 133,
    134, 141, 142,
    142, 135, 134,
    135, 142, 143,
    143, 136, 135,
    136, 143, 144,
    144, 137, 136,
    137, 144, 145,
    145, 138, 137,
    138, 145, 146,
    146, 139, 138,
    140, 147, 148,
    148, 141, 140,
    141, 148, 149,
    149, 142, 141,
    142, 149, 150,
    150, 143, 142,
    143, 150, 151,
    151, 144, 143,
    144, 151, 152,
    152, 145, 144,
    145, 152, 153,
    153, 146, 145,
    147, 154, 155,
    155, 148, 147,
    148, 155, 156,
    156, 149, 148,
    149, 156, 157,
    157, 150, 149,
    150, 157, 158,
    158, 151, 150,
    151, 158, 159,
    159, 152, 151,
    152, 159, 160,
    160, 153, 152,
    154, 161, 162,
    162, 155, 154,
    155, 162, 163,
    163, 156, 155,
    156, 163, 164,
    164, 157, 156,
    157, 164, 165,
    165, 158, 157,
    158, 165, 166,
    166, 159, 158,
    159, 166, 167,
    167, 160, 159,
    161, 0, 1,
    1, 162, 161,
    162, 1, 2,
    2, 163, 162,
    163, 2, 3,
    3, 164, 163,
    164, 3, 4,
    4, 165, 164,
    165, 4, 5,
    5, 166, 165,
    166, 5, 6,
    6, 167, 166,
    6, 13, 174,
    174, 168, 6,
    168, 174, 175,
    175, 169, 168,
    169, 175, 176,
    176, 170, 169,
    170, 176, 177,
    177, 171, 170,
    171, 177, 178,
    178, 172, 171,
    172, 178, 179,
    179, 173, 172,
    13, 20, 180,
    180, 174, 13,
    174, 180, 181,
    181, 175, 174,
    175, 181, 182,
    182, 176, 175,
    176, 182, 183,
    183, 177, 176,
    177, 183, 184,
    184, 178, 177,
    178, 184, 185,
    185, 179, 178,
    20, 27, 186,
    186, 180, 20,
    180, 186, 187,
    187, 181, 180,
    181, 187, 188,
    188, 182, 181,
    182, 188, 189,
    189, 183, 182,
    183, 189, 190,
    190, 184, 183,
    184, 190, 191,
    191, 185, 184,
    27, 34, 192,
    192, 186, 27,
    186, 192, 193,
    193, 187, 186,
    187, 193, 194,
    194, 188, 187,
    188, 194, 195,
    195, 189, 188,
    189, 195, 196,
    196, 190, 189,
    190, 196, 197,
    197, 191, 190,
    34, 41, 198,
    198, 192, 34,
    192, 198, 199,
    199, 193, 192,
    193, 199, 200,
    200, 194, 193,
    194, 200, 201,
    201, 195, 194,
    195, 201, 202,
    202, 196, 195,
    196, 202, 203,
    203, 197, 196,
    41, 48, 204,
    204, 198, 41,
    198, 204, 205,
    205, 199, 198,
    199, 205, 206,
    206, 200, 199,
    200, 206, 207,
    207, 201, 200,
    201, 207, 208,
    208, 202, 201,
    202, 208, 209,
    209, 203, 202,
    48, 55, 210,
    210, 204, 48,
    204, 210, 211,
    211, 205, 204,
    205, 211, 212,
    212, 206, 205,
    206, 212, 213,
    213, 207, 206,
    207, 213, 214,
    214, 208, 207,
    208, 214, 215,
    215, 209, 208,
    55, 62, 216,
    216, 210, 55,
    210, 216, 217,
    217, 211, 210,
    211, 217, 218,
    218, 212, 211,
    212, 218, 219,
    219, 213, 212,
    213, 219, 220,
    220, 214, 213,
    214, 220, 221,
    221, 215, 214,
    62, 69, 222,
    222, 216, 62,
    216, 222, 223,
    223, 217, 216,
    217, 223, 224,
    224, 218, 217,
    218, 224, 225,
    225, 219, 218,
    219, 225, 226,
    226, 220, 219,
    220, 226, 227,
    227, 221, 220,
    69, 76, 228,
    228, 222, 69,
    222, 228, 229,
    229, 223, 222,
    223, 229, 230,
    230, 224, 223,
    224, 230, 231,
    231, 225, 224,
    225, 231, 232,
    232, 226, 225,
    226, 232, 233,
    233, 227, 226,
    76, 83, 234,
    234, 228, 76,
    228, 234, 235,
    235, 229, 228,
    229, 235, 236,
    236, 230, 229,
    230, 236, 237,
    237, 231, 230,
    231, 237, 238,
    238, 232, 231,
    232, 238, 239,
    239, 233, 232,
    83, 90, 240,
    240, 234, 83,
    234, 240, 241,
    241, 235, 234,
    235, 241, 242,
    242, 236, 235,
    236, 242, 243,
    243, 237, 236,
    237, 243, 244,
    244, 238, 237,
    238, 244, 245,
    245, 239, 238,
    90, 97, 246,
    246, 240, 90,
    240, 246, 247,
    247, 241, 240,
    241, 247, 248,
    248, 242, 241,
    242, 248, 249,
    249, 243, 242,
    243, 249, 250,
    250, 244, 243,
    244, 250, 251,
    251, 245, 244,
    97, 104, 252,
    252, 246, 97,
    246, 252, 253,
    253, 247, 246,
    247, 253, 254,
    254, 248, 247,
    248, 254, 255,
    255, 249, 248,
    249, 255, 256,
    256, 250, 249,
    250, 256, 257,
    257, 251, 250,
    104, 111, 258,
    258, 252, 104,
    252, 258, 259,
    259, 253, 252,
    253, 259, 260,
    260, 254, 253,
    254, 260, 261,
    261, 255, 254,
    255, 261, 262,
    262, 256, 255,
    256, 262, 263,
    263, 257, 256,
    111, 118, 264,
    264, 258, 111,
    258, 264, 265,
    265, 259, 258,
    259, 265, 266,
    266, 260, 259,
    260, 266, 267,
    267, 261, 260,
    261, 267, 268,
    268, 262, 261,
    262, 268, 269,
    269, 263, 262,
    118, 125, 270,
    270, 264, 118,
    264, 270, 271,
    271, 265, 264,
    265, 271, 272,
    272, 266, 265,
    266, 272, 273,
    273, 267, 266,
    267, 273, 274,
    274, 268, 267,
    268, 274, 275,
    275, 269, 268,
    125, 132, 276,
    276, 270, 125,
    270, 276, 277,
    277, 271, 270,
    271, 277, 278,
    278, 272, 271,
    272, 278, 279,
    279, 273, 272,
    273, 279, 280,
    280, 274, 273,
    274, 280, 281,
    281, 275, 274,
    132, 139, 282,
    282, 276, 132,
    276, 282, 283,
    283, 277, 276,
    277, 283, 284,
    284, 278, 277,
    278, 284, 285,
    285, 279, 278,
    279, 285, 286,
    286, 280, 279,
    280, 286, 287,
    287, 281, 280,
    139, 146, 288,
    288, 282, 139,
    282, 288, 289,
    289, 283, 282,
    283, 289, 290,
    290, 284, 283,
    284, 290, 291,
    291, 285, 284,
    285, 291, 292,
    292, 286, 285,
    286, 292, 293,
    293, 287, 286,
    146, 153, 294,
    294, 288, 146,
    288, 294, 295,
    295, 289, 288,
    289, 295, 296,
    296, 290, 289,
    290, 296, 297,
    297, 291, 290,
    291, 297, 298,
    298, 292, 291,
    292, 298, 299,
    299, 293, 292,
    153, 160, 300,
    300, 294, 153,
    294, 300, 301,
    301, 295, 294,
    295, 301, 302,
    302, 296, 295,
    296, 302, 303,
    303, 297, 296,
    297, 303, 304,
    304, 298, 297,
    298, 304, 305,
    305, 299, 298,
    160, 167, 306,
    306, 300, 160,
    300, 306, 307,
    307, 301, 300,
    301, 307, 308,
    308, 302, 301,
    302, 308, 309,
    309, 303, 302,
    303, 309, 310,
    310, 304, 303,
    304, 310, 311,
    311, 305, 304,
    167, 6, 168,
    168, 306, 167,
    306, 168, 169,
    169, 307, 306,
    307, 169, 170,
    170, 308, 307,
    308, 170, 171,
    171, 309, 308,
    309, 171, 172,
    172, 310, 309,
    310, 172, 173,
    173, 311, 310,
    173, 179, 318,
    318, 312, 173,
    312, 318, 319,
    319, 313, 312,
    313, 319, 320,
    320, 314, 313,
    314, 320, 321,
    321, 315, 314,
    315, 321, 322,
    322, 316, 315,
    316, 322, 323,
    323, 317, 316,
    179, 185, 324,
    324, 318, 179,
    318, 324, 325,
    325, 319, 318,
    319, 325, 326,
    326, 320, 319,
    320, 326, 327,
    327, 321, 320,
    321, 327, 328,
    328, 322, 321,
    322, 328, 329,
    329, 323, 322,
    185, 191, 330,
    330, 324, 185,
    324, 330, 331,
    331, 325, 324,
    325, 331, 332,
    332, 326, 325,
    326, 332, 333,
    333, 327, 326,
    327, 333, 334,
    334, 328, 327,
    328, 334, 335,
    335, 329, 328,
    191, 197, 336,
    336, 330, 191,
    330, 336, 337,
    337, 331, 330,
    331, 337, 338,
    338, 332, 331,
    332, 338, 339,
    339, 333, 332,
    333, 339, 340,
    340, 334, 333,
    334, 340, 341,
    341, 335, 334,
    197, 203, 342,
    342, 336, 197,
    336, 342, 343,
    343, 337, 336,
    337, 343, 344,
    344, 338, 337,
    338, 344, 345,
    345, 339, 338,
    339, 345, 346,
    346, 340, 339,
    340, 346, 347,
    347, 341, 340,
    203, 209, 348,
    348, 342, 203,
    342, 348, 349,
    349, 343, 342,
    343, 349, 350,
    350, 344, 343,
    344, 350, 351,
    351, 345, 344,
    345, 351, 352,
    352, 346, 345,
    346, 352, 353,
    353, 347, 346,
    209, 215, 354,
    354, 348, 209,
    348, 354, 355,
    355, 349, 348,
    349, 355, 356,
    356, 350, 349,
    350, 356, 357,
    357, 351, 350,
    351, 357, 358,
    358, 352, 351,
    352, 358, 359,
    359, 353, 352,
    215, 221, 360,
    360, 354, 215,
    354, 360, 361,
    361, 355, 354,
    355, 361, 362,
    362, 356, 355,
    356, 362, 363,
    363, 357, 356,
    357, 363, 364,
    364, 358, 357,
    358, 364, 365,
    365, 359, 358,
    221, 227, 366,
    366, 360, 221,
    360, 366, 367,
    367, 361, 360,
    361, 367, 368,
    368, 362, 361,
    362, 368, 369,
    369, 363, 362,
    363, 369, 370,
    370, 364, 363,
    364, 370, 371,
    371, 365, 364,
    227, 233, 372,
    372, 366, 227,
    366, 372, 373,
    373, 367, 366,
    367, 373, 374,
    374, 368, 367,
    368, 374, 375,
    375, 369, 368,
    369, 375, 376,
    376, 370, 369,
    370, 376, 377,
    377, 371, 370,
    233, 239, 378,
    378, 372, 233,
    372, 378, 379,
    379, 373, 372,
    373, 379, 380,
    380, 374, 373,
    374, 380, 381,
    381, 375, 374,
    375, 381, 382,
    382, 376, 375,
    376, 382, 383,
    383, 377, 376,
    239, 245, 384,
    384, 378, 239,
    378, 384, 385,
    385, 379, 378,
    379, 385, 386,
    386, 380, 379,
    380, 386, 387,
    387, 381, 380,
    381, 387, 388,
    388, 382, 381,
    382, 388, 389,
    389, 383, 382,
    245, 251, 390,
    390, 384, 245,
    384, 390, 391,
    391, 385, 384,
    385, 391, 392,
    392, 386, 385,
    386, 392, 393,
    393, 387, 386,
    387, 393, 394,
    394, 388, 387,
    388, 394, 395,
    395, 389, 388,
    251, 257, 396,
    396, 390, 251,
    390, 396, 397,
    397, 391, 390,
    391, 397, 398,
    398, 392, 391,
    392, 398, 399,
    399, 393, 392,
    393, 399, 400,
    400, 394, 393,
    394, 400, 401,
    401, 395, 394,
    257, 263, 402,
    402, 396, 257,
    396, 402, 403,
    403, 397, 396,
    397, 403, 404,
    404, 398, 397,
    398, 404, 405,
    405, 399, 398,
    399, 405, 406,
    406, 400, 399,
    400, 406, 407,
    407, 401, 400,
    263, 269, 408,
    408, 402, 263,
    402, 408, 409,
    409, 403, 402,
    403, 409, 410,
    410, 404, 403,
    404, 410, 411,
    411, 405, 404,
    405, 411, 412,
    412, 406, 405,
    406, 412, 413,
    413, 407, 406,
    269, 275, 414,
    414, 408, 269,
    408, 414, 415,
    415, 409, 408,
    409, 415, 416,
    416, 410, 409,
    410, 416, 417,
    417, 411, 410,
    411, 417, 418,
    418, 412, 411,
    412, 418, 419,
    419, 413, 412,
    275, 281, 420,
    420, 414, 275,
    414, 420, 421,
    421, 415, 414,
    415, 421, 422,
    422, 416, 415,
    416, 422, 423,
    423, 417, 416,
    417, 423, 424,
    424, 418, 417,
    418, 424, 425,
    425, 419, 418,
    281, 287, 426,
    426, 420, 281,
    420, 426, 427,
    427, 421, 420,
    421, 427, 428,
    428, 422, 421,
    422, 428, 429,
    429, 423, 422,
    423, 429, 430,
    430, 424, 423,
    424, 430, 431,
    431, 425, 424,
    287, 293, 432,
    432, 426, 287,
    426, 432, 433,
    433, 427, 426,
    427, 433, 434,
    434, 428, 427,
    428, 434, 435,
    435, 429, 428,
    429, 435, 436,
    436, 430, 429,
    430, 436, 437,
    437, 431, 430,
    293, 299, 438,
    438, 432, 293,
    432, 438, 439,
    439, 433, 432,
    433, 439, 440,
    440, 434, 433,
    434, 440, 441,
    441, 435, 434,
    435, 441, 442,
    442, 436, 435,
    436, 442, 443,
    443, 437, 436,
    299, 305, 444,
    444, 438, 299,
    438, 444, 445,
    445, 439, 438,
    439, 445, 446,
    446, 440, 439,
    440, 446, 447,
    447, 441, 440,
    441, 447, 448,
    448, 442, 441,
    442, 448, 449,
    449, 443, 442,
    305, 311, 450,
    450, 444, 305,
    444, 450, 451,
    451, 445, 444,
    445, 451, 452,
    452, 446, 445,
    446, 452, 453,
    453, 447, 446,
    447, 453, 454,
    454, 448, 447,
    448, 454, 455,
    455, 449, 448,
    311, 173, 312,
    312, 450, 311,
    450, 312, 313,
    313, 451, 450,
    451, 313, 314,
    314, 452, 451,
    452, 314, 315,
    315, 453, 452,
    453, 315, 316,
    316, 454, 453,
    454, 316, 317,
    317, 455, 454,
    317, 323, 462,
    462, 456, 317,
    456, 462, 463,
    463, 457, 456,
    457, 463, 464,
    464, 458, 457,
    458, 464, 465,
    465, 459, 458,
    459, 465, 466,
    466, 460, 459,
    460, 466, 461,
    323, 329, 467,
    467, 462, 323,
    462, 467, 468,
    468, 463, 462,
    463, 468, 469,
    469, 464, 463,
    464, 469, 470,
    470, 465, 464,
    465, 470, 471,
    471, 466, 465,
    466, 471, 461,
    329, 335, 472,
    472, 467, 329,
    467, 472, 473,
    473, 468, 467,
    468, 473, 474,
    474, 469, 468,
    469, 474, 475,
    475, 470, 469,
    470, 475, 476,
    476, 471, 470,
    471, 476, 461,
    335, 341, 477,
    477, 472, 335,
    472, 477, 478,
    478, 473, 472,
    473, 478, 479,
    479, 474, 473,
    474, 479, 480,
    480, 475, 474,
    475, 480, 481,
    481, 476, 475,
    476, 481, 461,
    341, 347, 482,
    482, 477, 341,
    477, 482, 483,
    483, 478, 477,
    478, 483, 484,
    484, 479, 478,
    479, 484, 485,
    485, 480, 479,
    480, 485, 486,
    486, 481, 480,
    481, 486, 461,
    347, 353, 487,
    487, 482, 347,
    482, 487, 488,
    488, 483, 482,
    483, 488, 489,
    489, 484, 483,
    484, 489, 490,
    490, 485, 484,
    485, 490, 491,
    491, 486, 485,
    486, 491, 461,
    353, 359, 492,
    492, 487, 353,
    487, 492, 493,
    493, 488, 487,
    488, 493, 494,
    494, 489, 488,
    489, 494, 495,
    495, 490, 489,
    490, 495, 496,
    496, 491, 490,
    491, 496, 461,
    359, 365, 497,
    497, 492, 359,
    492, 497, 498,
    498, 493, 492,
    493, 498, 499,
    499, 494, 493,
    494, 499, 500,
    500, 495, 494,
    495, 500, 501,
    501, 496, 495,
    496, 501, 461,
    365, 371, 502,
    502, 497, 365,
    497, 502, 503,
    503, 498, 497,
    498, 503, 504,
    504, 499, 498,
    499, 504, 505,
    505, 500, 499,
    500, 505, 506,
    506, 501, 500,
    501, 506, 461,
    371, 377, 507,
    507, 502, 371,
    502, 507, 508,
    508, 503, 502,
    503, 508, 509,
    509, 504, 503,
    504, 509, 510,
    510, 505, 504,
    505, 510, 511,
    511, 506, 505,
    506, 511, 461,
    377, 383, 512,
    512, 507, 377,
    507, 512, 513,
    513, 508, 507,
    508, 513, 514,
    514, 509, 508,
    509, 514, 515,
    515, 510, 509,
    510, 515, 516,
    516, 511, 510,
    511, 516, 461,
    383, 389, 517,
    517, 512, 383,
    512, 517, 518,
    518, 513, 512,
    513, 518, 519,
    519, 514, 513,
    514, 519, 520,
    520, 515, 514,
    515, 520, 521,
    521, 516, 515,
    516, 521, 461,
    389, 395, 522,
    522, 517, 389,
    517, 522, 523,
    523, 518, 517,
    518, 523, 524,
    524, 519, 518,
    519, 524, 525,
    525, 520, 519,
    520, 525, 526,
    526, 521, 520,
    521, 526, 461,
    395, 401, 527,
    527, 522, 395,
    522, 527, 528,
    528, 523, 522,
    523, 528, 529,
    529, 524, 523,
    524, 529, 530,
    530, 525, 524,
    525, 530, 531,
    531, 526, 525,
    526, 531, 461,
    401, 407, 532,
    532, 527, 401,
    527, 532, 533,
    533, 528, 527,
    528, 533, 534,
    534, 529, 528,
    529, 534, 535,
    535, 530, 529,
    530, 535, 536,
    536, 531, 530,
    531, 536, 461,
    407, 413, 537,
    537, 532, 407,
    532, 537, 538,
    538, 533, 532,
    533, 538, 539,
    539, 534, 533,
    534, 539, 540,
    540, 535, 534,
    535, 540, 541,
    541, 536, 535,
    536, 541, 461,
    413, 419, 542,
    542, 537, 413,
    537, 542, 543,
    543, 538, 537,
    538, 543, 544,
    544, 539, 538,
    539, 544, 545,
    545, 540, 539,
    540, 545, 546,
    546, 541, 540,
    541, 546, 461,
    419, 425, 547,
    547, 542, 419,
    542, 547, 548,
    548, 543, 542,
    543, 548, 549,
    549, 544, 543,
    544, 549, 550,
    550, 545, 544,
    545, 550, 551,
    551, 546, 545,
    546, 551, 461,
    425, 431, 552,
    552, 547, 425,
    547, 552, 553,
    553, 548, 547,
    548, 553, 554,
    554, 549, 548,
    549, 554, 555,
    555, 550, 549,
    550, 555, 556,
    556, 551, 550,
    551, 556, 461,
    431, 437, 557,
    557, 552, 431,
    552, 557, 558,
    558, 553, 552,
    553, 558, 559,
    559, 554, 553,
    554, 559, 560,
    560, 555, 554,
    555, 560, 561,
    561, 556, 555,
    556, 561, 461,
    437, 443, 562,
    562, 557, 437,
    557, 562, 563,
    563, 558, 557,
    558, 563, 564,
    564, 559, 558,
    559, 564, 565,
    565, 560, 559,
    560, 565, 566,
    566, 561, 560,
    561, 566, 461,
    443, 449, 567,
    567, 562, 443,
    562, 567, 568,
    568, 563, 562,
    563, 568, 569,
    569, 564, 563,
    564, 569, 570,
    570, 565, 564,
    565, 570, 571,
    571, 566, 565,
    566, 571, 461,
    449, 455, 572,
    572, 567, 449,
    567, 572, 573,
    573, 568, 567,
    568, 573, 574,
    574, 569, 568,
    569, 574, 575,
    575, 570, 569,
    570, 575, 576,
    576, 571, 570,
    571, 576, 461,
    455, 317, 456,
    456, 572, 455,
    572, 456, 457,
    457, 573, 572,
    573, 457, 458,
    458, 574, 573,
    574, 458, 459,
    459, 575, 574,
    575, 459, 460,
    460, 576, 575,
    576, 460, 461,
    577, 584, 585,
    585, 578, 577,
    578, 585, 586,
    586, 579, 578,
    579, 586, 587,
    587, 580, 579,
    580, 587, 588,
    588, 581, 580,
    581, 588, 589,
    589, 582, 581,
    582, 589, 590,
    590, 583, 582,
    584, 591, 592,
    592, 585, 584,
    585, 592, 593,
    593, 586, 585,
    586, 593, 594,
    594, 587, 586,
    587, 594, 595,
    595, 588, 587,
    588, 595, 596,
    596, 589, 588,
    589, 596, 597,
    597, 590, 589,
    591, 598, 599,
    599, 592, 591,
    592, 599, 600,
    600, 593, 592,
    593, 600, 601,
    601, 594, 593,
    594, 601, 602,
    602, 595, 594,
    595, 602, 603,
    603, 596, 595,
    596, 603, 604,
    604, 597, 596,
    598, 605, 606,
    606, 599, 598,
    599, 606, 607,
    607, 600, 599,
    600, 607, 608,
    608, 601, 600,
    601, 608, 609,
    609, 602, 601,
    602, 609, 610,
    610, 603, 602,
    603, 610, 611,
    611, 604, 603,
    605, 612, 613,
    613, 606, 605,
    606, 613, 614,
    614, 607, 606,
    607, 614, 615,
    615, 608, 607,
    608, 615, 616,
    616, 609, 608,
    609, 616, 617,
    617, 610, 609,
    610, 617, 618,
    618, 611, 610,
    612, 619, 620,
    620, 613, 612,
    613, 620, 621,
    621, 614, 613,
    614, 621, 622,
    622, 615, 614,
    615, 622, 623,
    623, 616, 615,
    616, 623, 624,
    624, 617, 616,
    617, 624, 625,
    625, 618, 617,
    619, 626, 627,
    627, 620, 619,
    620, 627, 628,
    628, 621, 620,
    621, 628, 629,
    629, 622, 621,
    622, 629, 630,
    630, 623, 622,
    623, 630, 631,
    631, 624, 623,
    624, 631, 632,
    632, 625, 624,
    626, 633, 634,
    634, 627, 626,
    627, 634, 635,
    635, 628, 627,
    628, 635, 636,
    636, 629, 628,
    629, 636, 637,
    637, 630, 629,
    630, 637, 638,
    638, 631, 630,
    631, 638, 639,
    639, 632, 631,
    633, 640, 641,
    641, 634, 633,
    634, 641, 642,
    642, 635, 634,
    635, 642, 643,
    643, 636, 635,
    636, 643, 644,
    644, 637, 636,
    637, 644, 645,
    645, 638, 637,
    638, 645, 646,
    646, 639, 638,
    640, 647, 648,
    648, 641, 640,
    641, 648, 649,
    649, 642, 641,
    642, 649, 650,
    650, 643, 642,
    643, 650, 651,
    651, 644, 643,
    644, 651, 652,
    652, 645, 644,
    645, 652, 653,
    653, 646, 645,
    647, 654, 655,
    655, 648, 647,
    648, 655, 656,
    656, 649, 648,
    649, 656, 657,
    657, 650, 649,
    650, 657, 658,
    658, 651, 650,
    651, 658, 659,
    659, 652, 651,
    652, 659, 660,
    660, 653, 652,
    654, 577, 578,
    578, 655, 654,
    655, 578, 579,
    579, 656, 655,
    656, 579, 580,
    580, 657, 656,
    657, 580, 581,
    581, 658, 657,
    658, 581, 582,
    582, 659, 658,
    659, 582, 583,
    583, 660, 659,
    583, 590, 667,
    667, 661, 583,
    661, 667, 668,
    668, 662, 661,
    662, 668, 669,
    669, 663, 662,
    663, 669, 670,
    670, 664, 663,
    664, 670, 671,
    671, 665, 664,
    665, 671, 672,
    672, 666, 665,
    590, 597, 673,
    673, 667, 590,
    667, 673, 674,
    674, 668, 667,
    668, 674, 675,
    675, 669, 668,
    669, 675, 676,
    676, 670, 669,
    670, 676, 677,
    677, 671, 670,
    671, 677, 678,
    678, 672, 671,
    597, 604, 679,
    679, 673, 597,
    673, 679, 680,
    680, 674, 673,
    674, 680, 681,
    681, 675, 674,
    675, 681, 682,
    682, 676, 675,
    676, 682, 683,
    683, 677, 676,
    677, 683, 684,
    684, 678, 677,
    604, 611, 685,
    685, 679, 604,
    679, 685, 686,
    686, 680, 679,
    680, 686, 687,
    687, 681, 680,
    681, 687, 688,
    688, 682, 681,
    682, 688, 689,
    689, 683, 682,
    683, 689, 690,
    690, 684, 683,
    611, 618, 691,
    691, 685, 611,
    685, 691, 692,
    692, 686, 685,
    686, 692, 693,
    693, 687, 686,
    687, 693, 694,
    694, 688, 687,
    688, 694, 695,
    695, 689, 688,
    689, 695, 696,
    696, 690, 689,
    618, 625, 697,
    697, 691, 618,
    691, 697, 698,
    698, 692, 691,
    692, 698, 699,
    699, 693, 692,
    693, 699, 700,
    700, 694, 693,
    694, 700, 701,
    701, 695, 694,
    695, 701, 702,
    702, 696, 695,
    625, 632, 703,
    703, 697, 625,
    697, 703, 704,
    704, 698, 697,
    698, 704, 705,
    705, 699, 698,
    699, 705, 706,
    706, 700, 699,
    700, 706, 707,
    707, 701, 700,
    701, 707, 708,
    708, 702, 701,
    632, 639, 709,
    709, 703, 632,
    703, 709, 710,
    710, 704, 703,
    704, 710, 711,
    711, 705, 704,
    705, 711, 712,
    712, 706, 705,
    706, 712, 713,
    713, 707, 706,
    707, 713, 714,
    714, 708, 707,
    639, 646, 715,
    715, 709, 639,
    709, 715, 716,
    716, 710, 709,
    710, 716, 717,
    717, 711, 710,
    711, 717, 718,
    718, 712, 711,
    712, 718, 719,
    719, 713, 712,
    713, 719, 720,
    720, 714, 713,
    646, 653, 721,
    721, 715, 646,
    715, 721, 722,
    722, 716, 715,
    716, 722, 723,
    723, 717, 716,
    717, 723, 724,
    724, 718, 717,
    718, 724, 725,
    725, 719, 718,
    719, 725, 726,
    726, 720, 719,
    653, 660, 727,
    727, 721, 653,
    721, 727, 728,
    728, 722, 721,
    722, 728, 729,
    729, 723, 722,
    723, 729, 730,
    730, 724, 723,
    724, 730, 731,
    731, 725, 724,
    725, 731, 732,
    732, 726, 725,
    660, 583, 661,
    661, 727, 660,
    727, 661, 662,
    662, 728, 727,
    728, 662, 663,
    663, 729, 728,
    729, 663, 664,
    664, 730, 729,
    730, 664, 665,
    665, 731, 730,
    731, 665, 666,
    666, 732, 731,
    733, 740, 741,
    741, 734, 733,
    734, 741, 742,
    742, 735, 734,
    735, 742, 743,
    743, 736, 735,
    736, 743, 744,
    744, 737, 736,
    737, 744, 745,
    745, 738, 737,
    738, 745, 746,
    746, 739, 738,
    740, 747, 748,
    748, 741, 740,
    741, 748, 749,
    749, 742, 741,
    742, 749, 750,
    750, 743, 742,
    743, 750, 751,
    751, 744, 743,
    744, 751, 752,
    752, 745, 744,
    745, 752, 753,
    753, 746, 745,
    747, 754, 755,
    755, 748, 747,
    748, 755, 756,
    756, 749, 748,
    749, 756, 757,
    757, 750, 749,
    750, 757, 758,
    758, 751, 750,
    751, 758, 759,
    759, 752, 751,
    752, 759, 760,
    760, 753, 752,
    754, 761, 762,
    762, 755, 754,
    755, 762, 763,
    763, 756, 755,
    756, 763, 764,
    764, 757, 756,
    757, 764, 765,
    765, 758, 757,
    758, 765, 766,
    766, 759, 758,
    759, 766, 767,
    767, 760, 759,
    761, 768, 769,
    769, 762, 761,
    762, 769, 770,
    770, 763, 762,
    763, 770, 771,
    771, 764, 763,
    764, 771, 772,
    772, 765, 764,
    765, 772, 773,
    773, 766, 765,
    766, 773, 774,
    774, 767, 766,
    768, 775, 776,
    776, 769, 768,
    769, 776, 777,
    777, 770, 769,
    770, 777, 778,
    778, 771, 770,
    771, 778, 779,
    779, 772, 771,
    772, 779, 780,
    780, 773, 772,
    773, 780, 781,
    781, 774, 773,
    775, 782, 783,
    783, 776, 775,
    776, 783, 784,
    784, 777, 776,
    777, 784, 785,
    785, 778, 777,
    778, 785, 786,
    786, 779, 778,
    779, 786, 787,
    787, 780, 779,
    780, 787, 788,
    788, 781, 780,
    782, 789, 790,
    790, 783, 782,
    783, 790, 791,
    791, 784, 783,
    784, 791, 792,
    792, 785, 784,
    785, 792, 793,
    793, 786, 785,
    786, 793, 794,
    794, 787, 786,
    787, 794, 795,
    795, 788, 787,
    789, 796, 797,
    797, 790, 789,
    790, 797, 798,
    798, 791, 790,
    791, 798, 799,
    799, 792, 791,
    792, 799, 800,
    800, 793, 792,
    793, 800, 801,
    801, 794, 793,
    794, 801, 802,
    802, 795, 794,
    796, 803, 804,
    804, 797, 796,
    797, 804, 805,
    805, 798, 797,
    798, 805, 806,
    806, 799, 798,
    799, 806, 807,
    807, 800, 799,
    800, 807, 808,
    808, 801, 800,
    801, 808, 809,
    809, 802, 801,
    803, 810, 811,
    811, 804, 803,
    804, 811, 812,
    812, 805, 804,
    805, 812, 813,
    813, 806, 805,
    806, 813, 814,
    814, 807, 806,
    807, 814, 815,
    815, 808, 807,
    808, 815, 816,
    816, 809, 808,
    810, 733, 734,
    734, 811, 810,
    811, 734, 735,
    735, 812, 811,
    812, 735, 736,
    736, 813, 812,
    813, 736, 737,
    737, 814, 813,
    814, 737, 738,
    738, 815, 814,
    815, 738, 739,
    739, 816, 815,
    739, 746, 823,
    823, 817, 739,
    817, 823, 824,
    824, 818, 817,
    818, 824, 825,
    825, 819, 818,
    819, 825, 826,
    826, 820, 819,
    820, 826, 827,
    827, 821, 820,
    821, 827, 828,
    828, 822, 821,
    746, 753, 829,
    829, 823, 746,
    823, 829, 830,
    830, 824, 823,
    824, 830, 831,
    831, 825, 824,
    825, 831, 832,
    832, 826, 825,
    826, 832, 833,
    833, 827, 826,
    827, 833, 834,
    834, 828, 827,
    753, 760, 835,
    835, 829, 753,
    829, 835, 836,
    836, 830, 829,
    830, 836, 837,
    837, 831, 830,
    831, 837, 838,
    838, 832, 831,
    832, 838, 839,
    839, 833, 832,
    833, 839, 840,
    840, 834, 833,
    760, 767, 841,
    841, 835, 760,
    835, 841, 842,
    842, 836, 835,
    836, 842, 843,
    843, 837, 836,
    837, 843, 844,
    844, 838, 837,
    838, 844, 845,
    845, 839, 838,
    839, 845, 846,
    846, 840, 839,
    767, 774, 847,
    847, 841, 767,
    841, 847, 848,
    848, 842, 841,
    842, 848, 849,
    849, 843, 842,
    843, 849, 850,
    850, 844, 843,
    844, 850, 851,
    851, 845, 844,
    845, 851, 852,
    852, 846, 845,
    774, 781, 853,
    853, 847, 774,
    847, 853, 854,
    854, 848, 847,
    848, 854, 855,
    855, 849, 848,
    849, 855, 856,
    856, 850, 849,
    850, 856, 857,
    857, 851, 850,
    851, 857, 858,
    858, 852, 851,
    781, 788, 859,
    859, 853, 781,
    853, 859, 860,
    860, 854, 853,
    854, 860, 861,
    861, 855, 854,
    855, 861, 862,
    862, 856, 855,
    856, 862, 863,
    863, 857, 856,
    857, 863, 864,
    864, 858, 857,
    788, 795, 865,
    865, 859, 788,
    859, 865, 866,
    866, 860, 859,
    860, 866, 867,
    867, 861, 860,
    861, 867, 868,
    868, 862, 861,
    862, 868, 869,
    869, 863, 862,
    863, 869, 870,
    870, 864, 863,
    795, 802, 871,
    871, 865, 795,
    865, 871, 872,
    872, 866, 865,
    866, 872, 873,
    873, 867, 866,
    867, 873, 874,
    874, 868, 867,
    868, 874, 875,
    875, 869, 868,
    869, 875, 876,
    876, 870, 869,
    802, 809, 877,
    877, 871, 802,
    871, 877, 878,
    878, 872, 871,
    872, 878, 879,
    879, 873, 872,
    873, 879, 880,
    880, 874, 873,
    874, 880, 881,
    881, 875, 874,
    875, 881, 882,
    882, 876, 875,
    809, 816, 883,
    883, 877, 809,
    877, 883, 884,
    884, 878, 877,
    878, 884, 885,
    885, 879, 878,
    879, 885, 886,
    886, 880, 879,
    880, 886, 887,
    887, 881, 880,
    881, 887, 888,
    888, 882, 881,
    816, 739, 817,
    817, 883, 816,
    883, 817, 818,
    818, 884, 883,
    884, 818, 819,
    819, 885, 884,
    885, 819, 820,
    820, 886, 885,
    886, 820, 821,
    821, 887, 886,
    887, 821, 822,
    822, 888, 887,
    896, 890, 889,
    890, 896, 897,
    897, 891, 890,
    891, 897, 898,
    898, 892, 891,
    892, 898, 899,
    899, 893, 892,
    893, 899, 900,
    900, 894, 893,
    894, 900, 901,
    901, 895, 894,
    902, 896, 889,
    896, 902, 903,
    903, 897, 896,
    897, 903, 904,
    904, 898, 897,
    898, 904, 905,
    905, 899, 898,
    899, 905, 906,
    906, 900, 899,
    900, 906, 907,
    907, 901, 900,
    908, 902, 889,
    902, 908, 909,
    909, 903, 902,
    903, 909, 910,
    910, 904, 903,
    904, 910, 911,
    911, 905, 904,
    905, 911, 912,
    912, 906, 905,
    906, 912, 913,
    913, 907, 906,
    914, 908, 889,
    908, 914, 915,
    915, 909, 908,
    909, 915, 916,
    916, 910, 909,
    910, 916, 917,
    917, 911, 910,
    911, 917, 918,
    918, 912, 911,
    912, 918, 919,
    919, 913, 912,
    920, 914, 889,
    914, 920, 921,
    921, 915, 914,
    915, 921, 922,
    922, 916, 915,
    916, 922, 923,
    923, 917, 916,
    917, 923, 924,
    924, 918, 917,
    918, 924, 925,
    925, 919, 918,
    926, 920, 889,
    920, 926, 927,
    927, 921, 920,
    921, 927, 928,
    928, 922, 921,
    922, 928, 929,
    929, 923, 922,
    923, 929, 930,
    930, 924, 923,
    924, 930, 931,
    931, 925, 924,
    932, 926, 889,
    926, 932, 933,
    933, 927, 926,
    927, 933, 934,
    934, 928, 927,
    928, 934, 935,
    935, 929, 928,
    929, 935, 936,
    936, 930, 929,
    930, 936, 937,
    937, 931, 930,
    938, 932, 889,
    932, 938, 939,
    939, 933, 932,
    933, 939, 940,
    940, 934, 933,
    934, 940, 941,
    941, 935, 934,
    935, 941, 942,
    942, 936, 935,
    936, 942, 943,
    943, 937, 936,
    944, 938, 889,
    938, 944, 945,
    945, 939, 938,
    939, 945, 946,
    946, 940, 939,
    940, 946, 947,
    947, 941, 940,
    941, 947, 948,
    948, 942, 941,
    942, 948, 949,
    949, 943, 942,
    950, 944, 889,
    944, 950, 951,
    951, 945, 944,
    945, 951, 952,
    952, 946, 945,
    946, 952, 953,
    953, 947, 946,
    947, 953, 954,
    954, 948, 947,
    948, 954, 955,
    955, 949, 948,
    956, 950, 889,
    950, 956, 957,
    957, 951, 950,
    951, 957, 958,
    958, 952, 951,
    952, 958, 959,
    959, 953, 952,
    953, 959, 960,
    960, 954, 953,
    954, 960, 961,
    961, 955, 954,
    962, 956, 889,
    956, 962, 963,
    963, 957, 956,
    957, 963, 964,
    964, 958, 957,
    958, 964, 965,
    965, 959, 958,
    959, 965, 966,
    966, 960, 959,
    960, 966, 967,
    967, 961, 960,
    968, 962, 889,
    962, 968, 969,
    969, 963, 962,
    963, 969, 970,
    970, 964, 963,
    964, 970, 971,
    971, 965, 964,
    965, 971, 972,
    972, 966, 965,
    966, 972, 973,
    973, 967, 966,
    974, 968, 889,
    968, 974, 975,
    975, 969, 968,
    969, 975, 976,
    976, 970, 969,
    970, 976, 977,
    977, 971, 970,
    971, 977, 978,
    978, 972, 971,
    972, 978, 979,
    979, 973, 972,
    980, 974, 889,
    974, 980, 981,
    981, 975, 974,
    975, 981, 982,
    982, 976, 975,
    976, 982, 983,
    983, 977, 976,
    977, 983, 984,
    984, 978, 977,
    978, 984, 985,
    985, 979, 978,
    986, 980, 889,
    980, 986, 987,
    987, 981, 980,
    981, 987, 988,
    988, 982, 981,
    982, 988, 989,
    989, 983, 982,
    983, 989, 990,
    990, 984, 983,
    984, 990, 991,
    991, 985, 984,
    992, 986, 889,
    986, 992, 993,
    993, 987, 986,
    987, 993, 994,
    994, 988, 987,
    988, 994, 995,
    995, 989, 988,
    989, 995, 996,
    996, 990, 989,
    990, 996, 997,
    997, 991, 990,
    998, 992, 889,
    992, 998, 999,
    999, 993, 992,
    993, 999, 1000,
    1000, 994, 993,
    994, 1000, 1001,
    1001, 995, 994,
    995, 1001, 1002,
    1002, 996, 995,
    996, 1002, 1003,
    1003, 997, 996,
    1004, 998, 889,
    998, 1004, 1005,
    1005, 999, 998,
    999, 1005, 1006,
    1006, 1000, 999,
    1000, 1006, 1007,
    1007, 1001, 1000,
    1001, 1007, 1008,
    1008, 1002, 1001,
    1002, 1008, 1009,
    1009, 1003, 1002,
    1010, 1004, 889,
    1004, 1010, 1011,
    1011, 1005, 1004,
    1005, 1011, 1012,
    1012, 1006, 1005,
    1006, 1012, 1013,
    1013, 1007, 1006,
    1007, 1013, 1014,
    1014, 1008, 1007,
    1008, 1014, 1015,
    1015, 1009, 1008,
    1016, 1010, 889,
    1010, 1016, 1017,
    1017, 1011, 1010,
    1011, 1017, 1018,
    1018, 1012, 1011,
    1012, 1018, 1019,
    1019, 1013, 1012,
    1013, 1019, 1020,
    1020, 1014, 1013,
    1014, 1020, 1021,
    1021, 1015, 1014,
    1022, 1016, 889,
    1016, 1022, 1023,
    1023, 1017, 1016,
    1017, 1023, 1024,
    1024, 1018, 1017,
    1018, 1024, 1025,
    1025, 1019, 1018,
    1019, 1025, 1026,
    1026, 1020, 1019,
    1020, 1026, 1027,
    1027, 1021, 1020,
    1028, 1022, 889,
    1022, 1028, 1029,
    1029, 1023, 1022,
    1023, 1029, 1030,
    1030, 1024, 1023,
    1024, 1030, 1031,
    1031, 1025, 1024,
    1025, 1031, 1032,
    1032, 1026, 1025,
    1026, 1032, 1033,
    1033, 1027, 1026,
    890, 1028, 889,
    1028, 890, 891,
    891, 1029, 1028,
    1029, 891, 892,
    892, 1030, 1029,
    1030, 892, 893,
    893, 1031, 1030,
    1031, 893, 894,
    894, 1032, 1031,
    1032, 894, 895,
    895, 1033, 1032,
    895, 901, 1040,
    1040, 1034, 895,
    1034, 1040, 1041,
    1041, 1035, 1034,
    1035, 1041, 1042,
    1042, 1036, 1035,
    1036, 1042, 1043,
    1043, 1037, 1036,
    1037, 1043, 1044,
    1044, 1038, 1037,
    1038, 1044, 1045,
    1045, 1039, 1038,
    901, 907, 1046,
    1046, 1040, 901,
    1040, 1046, 1047,
    1047, 1041, 1040,
    1041, 1047, 1048,
    1048, 1042, 1041,
    1042, 1048, 1049,
    1049, 1043, 1042,
    1043, 1049, 1050,
    1050, 1044, 1043,
    1044, 1050, 1051,
    1051, 1045, 1044,
    907, 913, 1052,
    1052, 1046, 907,
    1046, 1052, 1053,
    1053, 1047, 1046,
    1047, 1053, 1054,
    1054, 1048, 1047,
    1048, 1054, 1055,
    1055, 1049, 1048,
    1049, 1055, 1056,
    1056, 1050, 1049,
    1050, 1056, 1057,
    1057, 1051, 1050,
    913, 919, 1058,
    1058, 1052, 913,
    1052, 1058, 1059,
    1059, 1053, 1052,
    1053, 1059, 1060,
    1060, 1054, 1053,
    1054, 1060, 1061,
    1061, 1055, 1054,
    1055, 1061, 1062,
    1062, 1056, 1055,
    1056, 1062, 1063,
    1063, 1057, 1056,
    919, 925, 1064,
    1064, 1058, 919,
    1058, 1064, 1065,
    1065, 1059, 1058,
    1059, 1065, 1066,
    1066, 1060, 1059,
    1060, 1066, 1067,
    1067, 1061, 1060,
    1061, 1067, 1068,
    1068, 1062, 1061,
    1062, 1068, 1069,
    1069, 1063, 1062,
    925, 931, 1070,
    1070, 1064, 925,
    1064, 1070, 1071,
    1071, 1065, 1064,
    1065, 1071, 1072,
    1072, 1066, 1065,
    1066, 1072, 1073,
    1073, 1067, 1066,
    1067, 1073, 1074,
    1074, 1068, 1067,
    1068, 1074, 1075,
    1075, 1069, 1068,
    931, 937, 1076,
    1076, 1070, 931,
    1070, 1076, 1077,
    1077, 1071, 1070,
    1071, 1077, 1078,
    1078, 1072, 1071,
    1072, 1078, 1079,
    1079, 1073, 1072,
    1073, 1079, 1080,
    1080, 1074, 1073,
    1074, 1080, 1081,
    1081, 1075, 1074,
    937, 943, 1082,
    1082, 1076, 937,
    1076, 1082, 1083,
    1083, 1077, 1076,
    1077, 1083, 1084,
    1084, 1078, 1077,
    1078, 1084, 1085,
    1085, 1079, 1078,
    1079, 1085, 1086,
    1086, 1080, 1079,
    1080, 1086, 1087,
    1087, 1081, 1080,
    943, 949, 1088,
    1088, 1082, 943,
    1082, 1088, 1089,
    1089, 1083, 1082,
    1083, 1089, 1090,
    1090, 1084, 1083,
    1084, 1090, 1091,
    1091, 1085, 1084,
    1085, 1091, 1092,
    1092, 1086, 1085,
    1086, 1092, 1093,
    1093, 1087, 1086,
    949, 955, 1094,
    1094, 1088, 949,
    1088, 1094, 1095,
    1095, 1089, 1088,
    1089, 1095, 1096,
    1096, 1090, 1089,
    1090, 1096, 1097,
    1097, 1091, 1090,
    1091, 1097, 1098,
    1098, 1092, 1091,
    1092, 1098, 1099,
    1099, 1093, 1092,
    955, 961, 1100,
    1100, 1094, 955,
    1094, 1100, 1101,
    1101, 1095, 1094,
    1095, 1101, 1102,
    1102, 1096, 1095,
    1096, 1102, 1103,
    1103, 1097, 1096,
    1097, 1103, 1104,
    1104, 1098, 1097,
    1098, 1104, 1105,
    1105, 1099, 1098,
    961, 967, 1106,
    1106, 1100, 961,
    1100, 1106, 1107,
    1107, 1101, 1100,
    1101, 1107, 1108,
    1108, 1102, 1101,
    1102, 1108, 1109,
    1109, 1103, 1102,
    1103, 1109, 1110,
    1110, 1104, 1103,
    1104, 1110, 1111,
    1111, 1105, 1104,
    967, 973, 1112,
    1112, 1106, 967,
    1106, 1112, 1113,
    1113, 1107, 1106,
    1107, 1113, 1114,
    1114, 1108, 1107,
    1108, 1114, 1115,
    1115, 1109, 1108,
    1109, 1115, 1116,
    1116, 1110, 1109,
    1110, 1116, 1117,
    1117, 1111, 1110,
    973, 979, 1118,
    1118, 1112, 973,
    1112, 1118, 1119,
    1119, 1113, 1112,
    1113, 1119, 1120,
    1120, 1114, 1113,
    1114, 1120, 1121,
    1121, 1115, 1114,
    1115, 1121, 1122,
    1122, 1116, 1115,
    1116, 1122, 1123,
    1123, 1117, 1116,
    979, 985, 1124,
    1124, 1118, 979,
    1118, 1124, 1125,
    1125, 1119, 1118,
    1119, 1125, 1126,
    1126, 1120, 1119,
    1120, 1126, 1127,
    1127, 1121, 1120,
    1121, 1127, 1128,
    1128, 1122, 1121,
    1122, 1128, 1129,
    1129, 1123, 1122,
    985, 991, 1130,
    1130, 1124, 985,
    1124, 1130, 1131,
    1131, 1125, 1124,
    1125, 1131, 1132,
    1132, 1126, 1125,
    1126, 1132, 1133,
    1133, 1127, 1126,
    1127, 1133, 1134,
    1134, 1128, 1127,
    1128, 1134, 1135,
    1135, 1129, 1128,
    991, 997, 1136,
    1136, 1130, 991,
    1130, 1136, 1137,
    1137, 1131, 1130,
    1131, 1137, 1138,
    1138, 1132, 1131,
    1132, 1138, 1139,
    1139, 1133, 1132,
    1133, 1139, 1140,
    1140, 1134, 1133,
    1134, 1140, 1141,
    1141, 1135, 1134,
    997, 1003, 1142,
    1142, 1136, 997,
    1136, 1142, 1143,
    1143, 1137, 1136,
    1137, 1143, 1144,
    1144, 1138, 1137,
    1138, 1144, 1145,
    1145, 1139, 1138,
    1139, 1145, 1146,
    1146, 1140, 1139,
    1140, 1146, 1147,
    1147, 1141, 1140,
    1003, 1009, 1148,
    1148, 1142, 1003,
    1142, 1148, 1149,
    1149, 1143, 1142,
    1143, 1149, 1150,
    1150, 1144, 1143,
    1144, 1150, 1151,
    1151, 1145, 1144,
    1145, 1151, 1152,
    1152, 1146, 1145,
    1146, 1152, 1153,
    1153, 1147, 1146,
    1009, 1015, 1154,
    1154, 1148, 1009,
    1148, 1154, 1155,
    1155, 1149, 1148,
    1149, 1155, 1156,
    1156, 1150, 1149,
    1150, 1156, 1157,
    1157, 1151, 1150,
    1151, 1157, 1158,
    1158, 1152, 1151,
    1152, 1158, 1159,
    1159, 1153, 1152,
    1015, 1021, 1160,
    1160, 1154, 1015,
    1154, 1160, 1161,
    1161, 1155, 1154,
    1155, 1161, 1162,
    1162, 1156, 1155,
    1156, 1162, 1163,
    1163, 1157, 1156,
    1157, 1163, 1164,
    1164, 1158, 1157,
    1158, 1164, 1165,
    1165, 1159, 1158,
    1021, 1027, 1166,
    1166, 1160, 1021,
    1160, 1166, 1167,
    1167, 1161, 1160,
    1161, 1167, 1168,
    1168, 1162, 1161,
    1162, 1168, 1169,
    1169, 1163, 1162,
    1163, 1169, 1170,
    1170, 1164, 1163,
    1164, 1170, 1171,
    1171, 1165, 1164,
    1027, 1033, 1172,
    1172, 1166, 1027,
    1166, 1172, 1173,
    1173, 1167, 1166,
    1167, 1173, 1174,
    1174, 1168, 1167,
    1168, 1174, 1175,
    1175, 1169, 1168,
    1169, 1175, 1176,
    1176, 1170, 1169,
    1170, 1176, 1177,
    1177, 1171, 1170,
    1033, 895, 1034,
    1034, 1172, 1033,
    1172, 1034, 1035,
    1035, 1173, 1172,
    1173, 1035, 1036,
    1036, 1174, 1173,
    1174, 1036, 1037,
    1037, 1175, 1174,
    1175, 1037, 1038,
    1038, 1176, 1175,
    1176, 1038, 1039,
    1039, 1177, 1176,
};


//----------------------------------------------------------------------------
// MakeTeapot Helper
//----------------------------------------------------------------------------
static void    MakeTeapot(
VERTEX* pVertices,
WORD* pwIndices )
{
    DWORD iVertex;

    // Copy vertices
    for( iVertex = 0; iVertex < NUMTEAPOTVERTICES; iVertex++ )
    {
        pVertices[iVertex].pos = teapotPositions[iVertex];
        pVertices[iVertex].norm = teapotNormals[iVertex];
    }

    // Copy face indices
    WORD* pwFace = pwIndices;
    WORD* pwFaceLim = pwFace + NUMTEAPOTINDICES;
    WORD* pwTeapotFace = teapotIndices;

    while( pwFace < pwFaceLim )
    {
        pwFace[0] = pwTeapotFace[0];
        pwFace[1] = pwTeapotFace[1];
        pwFace[2] = pwTeapotFace[2];

        pwFace += 3;
        pwTeapotFace += 3;
    }
}


//----------------------------------------------------------------------------
// DXUTCreateTeapot - createa  teapot mesh
//----------------------------------------------------------------------------
HRESULT WINAPI DXUTCreateTeapot( ID3D10Device* pDevice, ID3DX10Mesh** ppMesh )
{
    HRESULT hr = S_OK;

    WORD* pwIndices = NULL;
    VERTEX* pVertices = NULL;


    // Validate parameters
    if( !pDevice )
        return D3DERR_INVALIDCALL;
    if( !ppMesh )
        return D3DERR_INVALIDCALL;

    // Create the mesh
    UINT cFaces = NUMTEAPOTINDICES / 3;
    UINT cVertices = NUMTEAPOTVERTICES;

    // Create enough memory for the vertices and indices
    pVertices = new VERTEX[ cVertices ];
    if( !pVertices )
        return E_OUTOFMEMORY;
    pwIndices = new WORD[ cFaces * 3 ];
    if( !pwIndices )
        return E_OUTOFMEMORY;

    // Create a teapot
    MakeTeapot( pVertices, pwIndices );

    // Create a mesh
    hr = CreateShapeMesh( pDevice, ppMesh, pVertices, cVertices, pwIndices, cFaces * 3 );

    // Free up the memory
    SAFE_DELETE_ARRAY( pVertices );
    SAFE_DELETE_ARRAY( pwIndices );

    return hr;
}
